我是一個MongoDB新手,想問如何編寫涉及upsert和列表的更新命令。MongoDB - upsert涉及列表
基本上我要完成這樣的事情:那
{"_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應該是唯一的,以便 如果它存在ts,您追加到 位置數組
這是我寫的位置操作符與$ 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一直非常滿意,但編寫複雜查詢的確存在陡峭的學習曲線。
任何反饋將不勝感激。
由於提前, 阿米
再次檢查我的回答如下 - 我編輯它包含了我認爲是解決(或者至少東西,應該讓你非常接近) – nearlymonolith 2010-06-30 21:17:50
看到此[SO主題](http://stackoverflow.com/questions/17994552/mongodb-update-documents-in-anray/17995495#17995495)。 與此類似的東西。 – user10 2013-08-01 13:32:21