无法在mongoDB中找到更新文档的合适标准


Can't find proper criteria to update document in 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"
}

我的实现出了什么问题?

,请帮助,

格言

这里需要使用位置操作符:

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

您可以在这里阅读更多信息:http://docs.mongodb.org/manual/reference/operator/positional/