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中测试了它,它按预期工作,您能再次检查吗?