Arrays 如何更新数组中具有匹配值的所有对象?
我为一个系列提供了几个插页:Arrays 如何更新数组中具有匹配值的所有对象?,arrays,mongodb,Arrays,Mongodb,我为一个系列提供了几个插页: db.customerOrder.insert ( { "orders": [ { "orderNumber": "ord003", "orderDate": ISODate("2020-01-10T00:00:00Z"), "staffNumber": "stf789", }, { "orderNumber": "ord005", "orderDate": ISODate("2
db.customerOrder.insert (
{
"orders": [
{
"orderNumber": "ord003",
"orderDate": ISODate("2020-01-10T00:00:00Z"),
"staffNumber": "stf789",
},
{
"orderNumber": "ord005",
"orderDate": ISODate("2020-03-17T00:00:00Z"),
"staffNumber": "stf444",
},
{
"orderNumber": "ord005",
"orderDate": ISODate("2020-02-22T00:00:00Z"),
"staffNumber": "stf890",
}
]
}
);
db.customerOrder.insert (
{
"orders": [
{
"orderNumber": "ord001",
"orderDate": ISODate("2020-04-23T00:00:00Z"),
"staffNumber": "stf123",
},
{
"orderNumber": "ord005",
"orderDate": ISODate("2020-04-16T00:00:00Z"),
"staffNumber": "stf444",
}
]
}
);
db.customerOrder.insert (
{
"orders": [
{
"orderNumber": "ord001",
"orderDate": ISODate("2020-02-10T00:00:00Z"),
"staffNumber": "stf123",
},
{
"orderNumber": "ord005",
"orderDate": ISODate("2020-04-10T00:00:00Z"),
"staffNumber": "stf890",
}
]
}
);
db.customerOrder.insert (
{
"orders": [
{
"orderNumber": "ord005",
"orderDate": ISODate("2020-05-15T00:00:00Z"),
"staffNumber": "stf123",
},
{
"orderNumber": "ord004",
"orderDate": ISODate("2020-02-25T00:00:00Z"),
"staffNumber": "stf890",
}
]
}
);
这些是通过终端插入的,我没有使用任何服务器端语言,如php等,只是使用终端进行数据操作
我可以知道如何将ord005的所有订单号的stfNumber更改为stf100吗
我试过这个
db.customerOrder.update({"orders.orderNumber":"ord005"},{"$set":{"orders.$.staffNumber":"stf100"}})
不幸的是,只有具有ord005的第一个对象使用staffNumber更新为stf100您可以使用数组更新操作符
您的查询可能如下所示
db.customerOrder.updateMany(
{ "orders.orderNumber": "ord005" }, // filter part
{ "$set": { "orders.$[order].staffNumber": "stf100" } }, // update part
{ arrayFilters: [{ 'order.orderNumber': 'ord005' }] } // options part, to define which orders will be updated according to some condition
)
希望它有帮助它只更新了第一个文档中出现的所有内容:(好的,我已经更新了我的答案,我们需要使用
updateMany
而不是update
,我在mongo shell中测试了它,它按预期工作,您能再次检查吗?