javascript - 更新 mongodb 嵌入式数组中的所有元素

标签 javascript mongodb

我有一个用户文档,里面有一组注释(对象)。 我正在尝试为数组中的所有项目设置一个新字段 (_id)。但它没有触及任何东西。这是我当前的代码,我是否遗漏了什么?

 db.users.update(
  {'notes.added': '2018-10-22 04:42:45.336Z'},
  {'$set': {'notes.$._id': new ObjectId()}},
  {multi: true}
);

此外,我的目标是所有笔记,其中添加的日期等于该日期,是否可以在不指定参数的情况下定位所有笔记?

最佳答案

您只需在查询参数中包含数组。使用像 notes.added 这样的属性将不起作用。 $ 运算符需要查询运算符中的数组进行迭代。

db.users.update({notes:{$exists: true}}, {$set:{"notes.$._id": new ObjectId()}}, {multi:true});

希望对您有所帮助。

编辑1: 如果您有多个文档并且想要编辑所有文档中的所有数组,则需要像这样使用 updateMany:

db.users.updateMany({notes:{$exists: true}}, {$set:{"notes.$[elem]._id": new ObjectId()}},{arrayFilters:[{"elem.a" : {$gte: 0}}]});

其中 arryFilters 是对数组元素的过滤器。此查询将更新属性 a 的值大于或等于 0 的所有数组。 这样做时,您也可以在查询中使用 notes.property。只需将其括在“”中即可。

关于javascript - 更新 mongodb 嵌入式数组中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52923116/

相关文章:

javascript - 向打印机发送一个包含 HTML 代码的 javascript 变量

javascript - 通过 import() 检索模块时捕获 403 错误

node.js - 比较并添加嵌套数组内的两个数组

mongodb - 在使用 java api 的 mongodb 版本 3 中,我们如何在查询时给出提示

MongoDB 使用聚合连接两个字段,其中实际字段在数组中

JavaScript、JSP 和 JSON 不适用于 POST

javascript - 如何检查面板在 JavaScript 中是否可见?

javascript - 为什么clearinterval会改变这段代码中的内容?

javascript - 复杂的自定义 JS 交互动画——以及如何创建它们?

python - 如何使用pymongo在mongodb数据库中插入散列密码