mongodb$导致错误位置运算符未从查询中找到所需的匹配项



我一直在尝试更新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游乐场示例在这里

使用$[],可以引用数组并将值添加到每个对象中。

此处为$[]文档

上面写着:

所有位置运算符$[]表示更新运算符应修改指定数组字段中的所有元素。

这正是我们想要的:(

相关内容

  • 没有找到相关文章

最新更新