Mongoose id和_id改变响应中的值

3

当我在DTO中将变量作为id和_id进行检查时,在JSON响应中获得了不同的ID值

情况一(使用id作为变量)

响应的DTO

export class UserDetail {
    
        @Expose( )
        id: string; //HERE ID is used which gives original id as in db
    
        @Expose( )
        name: string;
    
        @IsOptional( )
        @Expose( )
        mobile: string;
   }

对此的响应是:

        {
            "id": "6229df5cc32d3aaef32525e0", // Correct id as in db
            "name": "Name1 Title1",
            "mobile": "AB391C339",
        },
        {
            "id": "6229df7bc32d3aaef32525e3", // Correct id as in db
            "name": "Name2 Title2",
            "mobile": "CDE393F339",
        }

案例 II (使用 _id 作为变量)

现在修改 DTO

export class UserDetail {
        
       @Expose( )
       _id: string; //HERE _id is used which gives different id value from original one and subsequent ids are in incremental fashion
        
       @Expose( )
       name: string;
        
       @IsOptional( )
       @Expose( )
       mobile: string;
  }

回应如下:

        {
            "_id": "624023c8193f2404f8312ccb", // Not same as present in db
            "name": "Name1 Title1",
            "mobile": "AB391C339"
        },
        {
            "_id": "624023c8193f2404f8312ccc", // Not same as present in db
            "name": "Name2 Title2",
            "mobile": "CDE393F339"
        },

用户架构如下:

@Schema( )
export class User extends Document {

    @Prop( { required: true } )
    name: string;

    @Prop( { required: true } )
    mobile: string;
}

另一个观察结果:在dto中使用_id,响应中的所有id都是递增的。例如:cb,cc,cd,ce 而只使用id,则显示数据库中的原始id

使用的库和框架:NestJs、Fastify、Mongoose、Class-Transformer


请分享你的模式,这样我们就可以更好地理解你正在尝试查询什么。 也许你的模式中既有_id又有id(正如Lukasz Piwowar所提到的)。 - Shay Zalman
已更新问题并附上了模式。 - PRABHAT SINGH RAJPUT
3个回答

1

我不太理解你的问题...

你需要提供关于你使用的库以及你实际尝试做什么的一些信息。

到目前为止,我只能告诉你mongodb使用_id字段作为每个记录的唯一标识符。

这个标识符的值也依赖于它创建的时间(阅读更多

一些库还会给每个条目添加一个虚拟字段id,它链接回_id,这仅仅是为了美观而已。

每个表条目都需要这样一个唯一的标识符来进行索引和关系数据建模。

希望这至少对你有所帮助。


问题已被编辑。 - PRABHAT SINGH RAJPUT
1
当我在DTO中将变量从id更改为_id时,响应中的ID值不同。 - PRABHAT SINGH RAJPUT
有相同的问题和相同的代码结构。@PRABHATSINGHRAJPUT,你是如何解决它的?请告诉我。 - Fazle Rabbi Ador
目前还没有找到解决方案或原因,所以为了完成工作,我正在使用第一种情况。 - PRABHAT SINGH RAJPUT

1
根据你所写的,我想到的唯一解释是你的文档实际上包含了id和_id两个字段。这可能是因为有人以某种奇怪的方式直接将文档导入数据库。当我导入原始的json备份时,我也遇到过这种情况。

0
据我所见,根据您分享的代码,模式中似乎没有"ID"这个属性。
请参考post,或许可以帮助您找出答案。

是的,但是在DTO中将变量从id更改为_id会产生不同的结果,而DTO中的id会给出与数据库中相同的正确id(_id)。 - PRABHAT SINGH RAJPUT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接