我有这样的结构:
{
...
_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 }
我做错了什么?感谢
答案 0 :(得分:1)
正如对该问题的评论中所讨论的,该问题与在查询中传递id的字符串表示直接相关,而不是使用ObjectId。通常,将ObjectIds的使用视为规则并将字符串表示用作特殊例外(例如在findByIdAndUpdate
等方法中)以避免此问题是一种很好的做法。
const { ObjectId } = require('mongodb');
.update({
_id: ObjectId(projectId),
'en-GB._id': ObjectId(entryId),
})