文档结构的例子为:
{
"dob": "12-13-2001",
"name": "Kam",
"visits": {
"0": {
"service_date": "12-5-2011",
"payment": "40",
"chk_number": "1234455",
},
"1": {
"service_date": "12-15-2011",
"payment": "45",
"chk_number": "3461234",
},
"2": {
"service_date": "12-25-2011",
"payment": "25",
"chk_number": "9821234",
}
}
}
我试图只更新"付款"在访问- 2和chk_number在访问- 1使用以下:
$query_criteria = array("name" => "Kam", "dob" => "12-13-2001");
$updated_data = array();
$updated_data['visits'][1]['chk_number'] = 567;
$updated_data['visits'][2]['payment'] = 100;
$ret = $collection->update( $query_criteria, array('$set' => $updated_data), array("safe" => true) );
但是这次更新删除了所有的访问,并用只包含payment和chk_number的访问覆盖它们。
我是新的mongodb和PHP。有没有人能告诉我我做错了什么,以及如何解决这个问题。
提前感谢........
你应该使用点符号。
db.collection.update(query_criteria,
{$set: {'visit.2.payment': 100,
'visit.1.chk_number': 567}});
你要做的是:
db.collection.update(query_criteria,
{'visit' : {'2' : {'payment': 100}},
{'1': {'chk_number': 567}}});
它的基本意思是"找到一个文档并用这个新文档覆盖它"。
我写的代码是在Javascript(因为他们会出现在mongo shell)。我把它翻译成合适的PHP留给你(我不是一个PHP的家伙)。