找不到适当的标准来更新mongoDB中的文档

时间:2013-06-01 12:07:57

标签: php mongodb

我遵循了存储在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"
}

我的实施有什么不对?

请,帮助,

马克西姆

1 个答案:

答案 0 :(得分:1)

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

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

您可以在此处详细了解:http://docs.mongodb.org/manual/reference/operator/positional/