node.js - 记录中对象的 _id 在更新同一对象的数据时发生变化

标签 node.js mongodb express-graphql

我有一个对象数组。每个对象都保存事件类型。我需要更新数组的对象之一。我使用 _id 来更新或删除对象。因此,当我传递 id 来更新数据时,我实际上在数组中找到该对象的索引,并用新数据替换该索引上的数据。

这里的问题是我的 _id 也发生了变化,因为我没有使用 $set 或没有直接使用查询更新。我正在使用映射函数更改数据并将其保存到 mongoDB 游标,稍后该游标会在某个地方更新。

下面是代码和代码的输出。

    organization.activityTypes = organization.activityTypes || [];
                    let findInd = organization.activityTypes.findIndex(x => x._id.toString() == (activityType.id?activityType.id.toString() : ''));
                    if(activityType.isDelete == true ) {
                        if(findInd > -1) organization.activityTypes.splice(findInd,1);
                    }
                    else if(findInd > -1) {
                        organization.activityTypes[findInd] ={
                            _id : activityType._id,
                            teams : activityType.teams == [] ? allTeams : activityType.teams ,
                            name: toTitleCase(activityType.name),
                            isDelete: activityType.isDelete,
                            custom : activityType.custom
                        }
                    }
                    else {
                        organization.activityTypes.push({
                            teams: activityType.teams == [] ? allTeams : activityType.teams,
                            name: toTitleCase(activityType.name),
                            isDelete: activityType.isDelete,
                            custom: activityType.custom
                        })
                    }
                })

上述代码的输出如下。 This is the image of the output.

因此,我更改了事件类型的名称。最初其 ID 为 5a15438482900b2aa6dc7ab1,然后转换为 5a15498cb024a02b4628e33f如何防止每次更新时数据库中 _id 发生更改?

最佳答案

我发现,如果我在特定索引位置更改整个对象,则该索引对象的 _id 也会更改,但如果我只更改该对象的字段,则对象数据将更新,但 _id 不会更新。我更新的代码写在下面。

args.activityTypes.map((activityType)=> {
                    let findInd = organization.activityTypes.findIndex(x =>(x._id.toString() == (activityType.id?activityType.id.toString() : '')));
                    if(activityType.isDelete == true ) {
                        if(findInd > -1) organization.activityTypes.splice(findInd,1);
                    }
                    else if(findInd > -1) {
                        organization.activityTypes[findInd].teams = activityType.teams == [] ? allTeams: activityType.teams;
                        organization.activityTypes[findInd].name = toTitleCase(activityType.name);
                        organization.activityTypes[findInd].isDelete = Object.prototype.hasOwnProperty.call(activityType,'isDelete') ? activityType.isDelete :organization.activityTypes[findInd].isDelete;
                        organization.activityTypes[findInd].custom = Object.prototype.hasOwnProperty.call(activityType,'custom') ? activityType.custom :organization.activityTypes[findInd].custom;
                    }
                    else {
                        organization.activityTypes.push({
                            teams: activityType.teams == [] ? allTeams : activityType.teams,
                            name: toTitleCase(activityType.name),
                            isDelete: activityType.isDelete,
                            custom: activityType.custom
                        })
                    }
                })

关于node.js - 记录中对象的 _id 在更新同一对象的数据时发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47431655/

相关文章:

javascript - node.js 中的回调函数是如何执行的?

node.js - MongoDB 获取两个数字字段之间的文档

java - mule-domain-config 中的 org.xml.sax.SAXParseException : Failed to read schema document mule-mongo. xsd

mongodb/mongoose,如何在更改两个文档时确保数据一致

node.js - 如何在中间件中使用 'this'上下文

node.js - 如何获取子文档字段的不同值及其在mongodb集合中的计数?

带有 $lookup 的 MongoDB 聚合仅包括(或投影)一些要从查询返回的字段

sequelize.js - self._expandAttributes 不是函数

java - apollo-android 不提供请求中的变量

node.js - GCloud App Engine Node js 应用程序在第一个请求时返回 404,但后续请求成功