我一直在尝试更新mongoDB中的数据。我想用一个新的productName字段更新所有产品。
我的数据看起来像:
{
"id": "12345",
"products": [{
"id": 0
"productCode": "test",
"status": "PENDING",
},
{
"id": 1
"productCode": "test",
"status": "COMPLETE",
}],
}
当我尝试以下内容时。我得到这个错误位置运算符没有从查询中找到所需的匹配项
db.customers.updateMany(
{ id: "12345" },
{ $set: {
"products.$.productName": "Name here" }
}
)
如果我使用account.0.productName,那么它很好并且会更新。我不确定为什么$对我不起作用
db.customers.updateMany(
{ id: "12345" },
{ $set: {
"products.0.productName": "Name here" }
}
)
位置运算符不工作,因为您没有将数组用于find
(第一个对象(
如果您尝试此查询,它将按预期工作,因为您通过products.id
找到了职位。
否则,如果您在数组中没有更新的位置,您就不能以这种方式使用$
运算符。您需要此查询:
db.collection.update({
"id": "12345",
},
{
"$set": {
"products.$[].newField": "test2"
}
},
{
"multi": true
})
Mongo游乐场示例在这里
使用$[]
,可以引用数组并将值添加到每个对象中。
此处为$[]
文档
上面写着:
所有位置运算符$[]表示更新运算符应修改指定数组字段中的所有元素。
这正是我们想要的:(