我有这样的结构:
{
...
_id: <projectId>
en-GB: [{
_id: <entryId>,
key: 'some key',
value: 'some value',
}]
}
我尝试使用 Mongoose(以及原始 mongodb)更新它,如下所示:
const result = await Project
.update({
_id: projectId,
'en-GB._id': entryId,
}, {
$set: {
'en-GB.$.key': 'g000gle!!',
},
})
.exec();
我已检查 ID 是否正确。但它没有更新任何内容:
{ n: 0, nModified: 0, ok: 1 }
我做错了什么?谢谢
最佳答案
正如该问题的评论中所讨论的,该问题与在查询中传递 id 的字符串表示形式直接相关,而不是使用 ObjectId。一般来说,最好将 ObjectId 的使用视为规则,并将字符串表示形式的使用视为特殊异常(exception)(例如在 findByIdAndUpdate
等方法中),以避免此问题。
const { ObjectId } = require('mongodb');
.update({
_id: ObjectId(projectId),
'en-GB._id': ObjectId(entryId),
})
关于javascript - MongoDB:更新集合中的数组项不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48195553/