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

标签 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 }

我做错了什么?谢谢

最佳答案

正如该问题的评论中所讨论的,该问题与在查询中传递 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/

相关文章:

javascript - jQuery - removeClass() 应用于除一个类之外的所有类

javascript - TS2339 : Property 'props' does not exist on type '{}'

node.js - Mongoose 如何一次调用更新不同文档中的多个子文档 - MERN 堆栈

mongodb - 如何在 MongoDB 中查找包含 NaN 字段的所有文档?

javascript - 自定义 swal 按钮未触发其特定功能

javascript - ng-click 在 ng-repeat 中使用 ng-include 绑定(bind)所有数据

mysql - 在 TypeScript 中导入时“找不到模块”

javascript - 清理 Javascript/Nodejs 代码

javascript - 如何在前端 Node js 中获取重置密码 api

python - Django NORel 灯具