我是一个MongoDB新手,想问一下如何写一个涉及upsert和list的更新命令.
基本上我想完成这样的事情:
{"_id" : ObjectId("4c28f62cbf8544c60506f11d"), "some_other_data":"goes here", "trips": [ {"name": "2010-05-10", "loc": [{"lat":21.321231, "lng": 16.8783234, "updated_at": "Mon May 10 2010 15:24:35"}, {"lat":21.321231, "lng": 16.8783234, "updated_at": "Mon May 10 2010 15:24:24"}] }, {"name": "2010-05-08", "loc": [{"lat":21.324239, "lng": 16.8735234, "updated_at": "Mon May 8 2010 11:18:05"}, {"lat":21.311234, "lng": 16.8743271, "updated_at": "Mon May 8 2010 11:17:55"}, {"lat":21.321238, "lng": 16.8782219, "updated_at": "Mon May 8 2010 11:17:45"}] } ]}
注意:
您提供旅行名称和当前位置
如果旅行不存在,则需要创建
trips.name应该是唯一的,这样如果它存在,则追加到位置数组
这是我写的结合了位置运算符和$ push的查询.
db.mycollection.update({"application_id": "MyTestApp", "trips.name": "2010-05-10"}, {$push: {'trips.$.loc': {"lat":11, "lng":11} }}, true);
但这会产生如下数据:
> db.mycollection.find({"application_id":"MyTestApp"}) { "_id" : ObjectId("4c29044ebf8544c60506f11f"), "application_id" : "MyTestApp", "trips" : { "$" : { "loc" : [ { "lat" : 11, "lng" : 11 } ] }, "name" : "2010-05-10" } }
你可以看到
"旅行"不是一个阵列
字面上花了"$"并用它创造了一个关键(doh!)
到目前为止,我对MongoDB非常满意,但是编写复杂的查询肯定会有一个陡峭的学习曲线.
任何反馈将不胜感激.
提前谢谢,Amie