在 mongod php 中更新数组中的多个元素

update multiple elements in an array in mongod php

我有这样的文档

       {
 "_id": ObjectId("5b570181d2ccda05180055ed"),
 "VehicleNumber": "7656hhh",
 "DriverDetails": [
  {
   "DriverEntryId": "5016cfe5-e5ca-f9e1-35c6-1ab1d09230fb",
   "DriverId": ObjectId("5b488d70d2ccda01840078e6"),
   "StartDate": ISODate("2018-07-17T22:00:00.0Z"),
   "EndDate": ISODate("2018-07-27T22:00:00.0Z"),
   "Status" : "Active"
},
 {
   "DriverEntryId": "772cb165-33e3-6d92-ff04-007785e52a84",
   "DriverId": ObjectId("5b507122d2ccda04580006ca"),
   "StartDate": ISODate("2018-07-02T22:00:00.0Z"),
   "EndDate": ISODate("2018-07-18T22:00:00.0Z"),
   "Status": "Active"
},
 {
   "DriverEntryId": "12d1fa8a-9987-2c27-119e-80dd434c0534",
   "DriverId": ObjectId("5b488d70d2ccda01840078e6"),
   "StartDate": ISODate("2018-06-24T22:00:00.0Z"),
   "EndDate": ISODate("2018-07-31T22:00:00.0Z"),
   "Status": "Active" 
} 
],
..
}

我想为所有嵌入文档设置状态 "Inactive"。我试过下面的代码行。它不工作...请帮助!!!

      $this->collection->updateOne(
             array('_id' => new MongoDB\BSON\ObjectID($this->id)
                  ),
             array('$set' => 
             array('DriverDetails.$.Status' => 'Inactive'
                  )
                )
           );

您需要使用 $[] 全位置运算符来更新数组中的每个元素

$this->collection->updateOne(
 array('_id' => new MongoDB\BSON\ObjectID($this->id)),
 array('$set' => array('DriverDetails.$[].Status' => 'Inactive'))
)

相当于JS

db.collection.update(
  { "_id": "546djdhu99wijfejf9euf94ef" },
  { "$set": { "DriverDetails.$[].Status": "Inactive" }}
)