我有一个用户文档,里面有一组注释(对象)。 我正在尝试为数组中的所有项目设置一个新字段 (_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/