【问题标题】:Updating a particular sub document in mongo db php在 mongo db php 中更新特定的子文档
【发布时间】:2018-02-21 18:36:11
【问题描述】:

我在 mongo db 中有一个名为 EmployeeTbl 的集合,其中包含类似文档

{
"_id": ObjectId("5a8d47d8d2ccda11fc004d91"),
"EmployeeNumber": "9883456787",
"FirstName": "Sana",
 ...
  "ContactDetails": [
 {
   "ContactTypeId": "04596c6f-82e6-8f00-e3a9-1f3199894284",
   "ContactType": "Phone",
   "ContactTypeValue": "99456789756" 
},
 {
   "ContactTypeId": "71d0152c-293f-4c6f-2360-bbdfe368eacb",
   "ContactType": "Phone",
   "ContactTypeValue": "9894567890" 
  } 
 ] 

}

我正在尝试更新 ContactDetails 中的子文档,并且我编写了以下代码。它不会更新现有的。它没有更新,而是添加了新的子文档。 请帮帮我!!!

     public function updateContactDetailsForItsSubDocument()
{
             // $bulkbatch = new MongoDB\Driver\BulkWrite(['ordered' => true]);  

              $subDocumentContactDetails = array(
                            "ContactDetails" => 
                                      array(
                                      "ContactType" => $this->ContactType,
                                      "ContactTypeValue" => $this->ContactTypeValue
                                   )
                               );

              $this->collection->update(
                            array('_id' => new MongoDB\BSON\ObjectID($this->id), 'ContactDetails.ContactTypeId'=> $this->ContactTypeId),
                            array('$set' => $subDocumentContactDetails)
                                );

             // $this->manager->executeBulkWrite($this->collection, $bulkbatch);  

}

【问题讨论】:

  • 有人请帮帮我!!!!

标签: mongodb mongodb-php php-mongodb


【解决方案1】:

更改您的 $subDocumentContactDetails 变量,使其使用 $ positional operator 更新嵌入文档:

$subDocumentContactDetails = array(
    "ContactDetails.$.ContactType" => $this->ContactType,
    "ContactDetails.$.ContactTypeValue" => $this->ContactTypeValue
);

$this->collection->update(
    array(
        "_id" => new MongoDB\BSON\ObjectID($this->id), 
        "ContactDetails.ContactTypeId" => $this->ContactTypeId
    ),
    array("$set" => $subDocumentContactDetails)
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2021-04-23
    • 2016-12-19
    相关资源
    最近更新 更多