0

我遵循了存储在 mongoDB 中的模型:

{
    "_id" : "some_table_name",
"content" : [{
  "id" : "1",
  "locname" : "KKH"
}, {
  "id" : "2",
  "locname" : "Singapore National Eye Centre"
}]
}

我尝试找到更新第二个元素(id = 2)的标准,也就是添加新字符串。

"new_element" : "foo"

所以新的观点应该是:

{
    "_id" : "some_table_name",
"content" : [{
  "id" : "1",
  "locname" : "KKH"
}, {
  "id" : "2",
 "locname" : "Singapore National Eye Centre"
  "new_element" : "foo" 
}]
}

表单 PHP

当我尝试通过 id 查找第二个节点时,我使用:

$array = $collection_bios2->findOne(
                array("_id" => "some_table_name", "content.id" => "2"),
                array("_id" => 0, "content.$" => 1)
        );

但是当我尝试更新它时,新节点进入content

$newdata = array('$set' => array("new_element" => "foo"));
$collection_bios2->update(
                         array("_id" => "some_table_name", "content.id" => "2"),                      
                         $newdata
                         );

我得到:

{
    "_id" : "some_table_name",
"content" : [{
  "id" : "1",
  "locname" : "KKH"
}, {
  "id" : "2",
  "locname" : "Singapore National Eye Centre"
}],
"new_element" : "foo"
}

我的实施有什么问题?

请帮忙,

格言

4

1 回答 1

1

您需要在此处使用位置运算符:

array('$set'=>array('content.$.new_element':'foo'))

您可以在此处阅读有关它的更多信息:http: //docs.mongodb.org/manual/reference/operator/positional/

于 2013-06-01T13:25:30.610 回答