我\xe2\x80\x99一直在尝试更新我的mongoDB中的数据。\n我想使用新的productName字段更新所有产品。
\n我的数据看起来像:
\n{\n "id": "12345",\n "products": [{\n "id": 0\n "productCode": "test",\n "status": "PENDING",\n },\n {\n "id": 1\n "productCode": "test",\n "status": "COMPLETE",\n }],\n}\nRun Code Online (Sandbox Code Playgroud)\n当我尝试以下操作时。我收到此错误位置运算符未从查询中找到所需的匹配项。
\ndb.customers.updateMany(\n { id: "12345" },\n { $set: {\n "products.$.productName": "Name here" } \n }\n)\nRun Code Online (Sandbox Code Playgroud)\n如果我执行 account.0.productName 那么它 \xe2\x80\x99s 很好并更新。I\xe2\x80\x99m 不确定为什么 $ 对我不起作用
\ndb.customers.updateMany(\n { id: "12345" },\n { $set: {\n "products.0.productName": "Name here" } \n }\n)\nRun Code Online (Sandbox Code Playgroud)\n
J.F*_*.F. 12
位置运算符不起作用,因为您没有将数组用于find(第一个对象)
如果您尝试此查询,它将按预期工作,因为您通过 找到了位置products.id。
否则,如果您没有更新数组的位置,则无法$以这种方式使用运算符。您需要这个查询:
db.collection.update({
"id": "12345",
},
{
"$set": {
"products.$[].newField": "test2"
}
},
{
"multi": true
})
Run Code Online (Sandbox Code Playgroud)
Mongo 游乐场示例在这里
使用$[]您可以引用数组并将值添加到每个对象中。
$[]文档在这里
它说:
所有位置运算符 $[] 指示更新运算符应修改指定数组字段中的所有元素。
这正是我们想要的:)
| 归档时间: |
|
| 查看次数: |
5630 次 |
| 最近记录: |