MongoDB:更新集合中的数组项不起作用

时间:2018-01-10 20:28:58

标签: javascript node.js mongodb mongoose

我有这样的结构:

{
  ...
  _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 }

我做错了什么?感谢

1 个答案:

答案 0 :(得分:1)

正如对该问题的评论中所讨论的,该问题与在查询中传递id的字符串表示直接相关,而不是使用ObjectId。通常,将ObjectIds的使用视为规则并将字符串表示用作特殊例外(例如在findByIdAndUpdate等方法中)以避免此问题是一种很好的做法。

const { ObjectId } = require('mongodb');

.update({
  _id: ObjectId(projectId),
  'en-GB._id': ObjectId(entryId),
})