【问题标题】:How to update sub document in mongodb php using new php driver library如何使用新的 php 驱动程序库更新 mongodb php 中的子文档
【发布时间】:2016-12-07 08:33:16
【问题描述】:

我正在使用这个 php 库 http://mongodb.github.io/mongo-php-library/

我有一个收藏帖子,在它的一个文档中我添加了多个 cmets,我可以像这样添加新的 cmets

$collection = (new MongoDB\Client)->project->posts;
$id = '5799a81fa60afa2010001838';
$result = $collection->updateOne(

     ["_id" => new MongoDB\BSON\ObjectID($id)],

     ['$push' => [
             "comments" => ['id'=>1,'name' => 'sohss','comm'=>'I like it']
                 ]
     ]

     );

现在如何更新我尝试过的任何特定评论但没有成功

$updateResult = $collection->updateOne(
                ['_id' => new MongoDB\BSON\ObjectID($id),'comments'],
                ['$set' =>  
                            ['comments'=>[0]=>
                                        ['name'=>'123']
                            ]
                ]
            );

更新子文档的正确语法是什么。

文档结构如下:

{
"_id" : ObjectId("5799a81fa60afa2010001838"),
"title" : "test",
"comments" : [ 
    {
        "id" : 3,
        "name" : "soh",
        "comm" : "I like it"
    }, 
    {
        "id" : 1,
        "name" : "sohss",
        "comm" : "I like it"
    }
  ]
}

【问题讨论】:

  • 能否显示文档的当前结构以及更新后文档的结构
  • 更新后的文档应该是什么样子?
  • 我想在子文档中更新“comm”字段:“我喜欢它”我该怎么做

标签: mongodb mongodb-php


【解决方案1】:

我们需要使用 $ 位置运算符来更新子文档中的特定字段,例如,如果我想更新 id 3 的子文档中的名称,我们可以这样做

$updateResult = $collection->updateOne(
                ['_id' => new MongoDB\BSON\ObjectID($id),'comments.id'=>3],
                ['$set' =>  
                            ['comments.$.name'=> 'Sohail anwar'

                            ]
                ]
            );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 2012-11-02
    • 1970-01-01
    • 2021-11-02
    • 2011-12-17
    相关资源
    最近更新 更多