记录中对象的 _id 在更新同一对象的数据时发生变化
_id of an Object in a Record changes on updating the data of the same object
我有一组对象。每个对象保存 Activity 类型。我需要更新数组的对象之一。我使用 _id 来更新或删除对象。所以,当我传递 id 来更新数据时,我实际上是在数组中找到该对象的索引,并将该索引上的数据替换为新数据。
这里的问题是我的 _id 也发生了变化,因为我没有使用 $set 或没有直接使用查询更新。我正在使用 map 函数更改数据并将其保存到 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.
所以,我更改了 activity 类型的名称。最初它的 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
})
}
})
我有一组对象。每个对象保存 Activity 类型。我需要更新数组的对象之一。我使用 _id 来更新或删除对象。所以,当我传递 id 来更新数据时,我实际上是在数组中找到该对象的索引,并将该索引上的数据替换为新数据。
这里的问题是我的 _id 也发生了变化,因为我没有使用 $set 或没有直接使用查询更新。我正在使用 map 函数更改数据并将其保存到 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.
所以,我更改了 activity 类型的名称。最初它的 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
})
}
})