我遵循了存储在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"
}
我的实施有什么不对?
请,帮助,
马克西姆
答案 0 :(得分:1)
您需要在此处使用位置运算符:
array('$set'=>array('content.$.new_element':'foo'))
您可以在此处详细了解:http://docs.mongodb.org/manual/reference/operator/positional/