如果不存在,如何在每个数组的元素上插入新的键/值(使用 MONGO 查询)



我想更新公司数组中的每个元素(对象(。

这里是我的实际数据:

{
_id: ObjectId("60d31024860ce0400b586111")
contracts: 
[
{
name: 1.pdf
url: "https://someurl"
createdAt: 2021-06-23T10:42:44.594+00:00
}
{
name: 2.pdf
url: "https://someurl"
}
{
name: 3.pdf
url: "https://someurl"
}
]
}

我想在每个对象(在合同中(上添加一个定义的日期;updatedAt";钥匙

我试过了:

db.companies.update({ _id: ObjectId("60d31024860ce0400b586111"),"contracts.createdAt": { $exists: false } },{ $set: { "contracts.$.createdAt": "test" } })

但我得到了这个错误:"位置运算符未从查询中找到所需的匹配项">

我也试过这个,它很有效,但我不想按文件名查询。我只想加上";createdAt";在发现的每一个元素上;createdAt";

db.companies.update({ "contracts.name": "2.pdf" },{ $set: { "contracts.$.createdAt": "atest" } })

我认为您需要使用过滤后的位置运算符:

$-更新第一个匹配的数组元素$[]-使用特定条件更新所有匹配的元素

具体条件在arrayFilters密钥中提到。


db.students.update(
{ },
{ $set: { "contracts.$[element].createdAt" : "atest"} },
{ multi: true,
arrayFilters: [ { "element.createdAt": { $exists: false } } ]
}
)

multi-true是对所有匹配的文档应用该操作。

还要注意,第一个查询参数是空的,这意味着查询对所有文档都运行。我使用它是基于您编写的第二个查询,但您也可以在其中添加ObjectID查询。

最新更新