我有一點mongo問題。我想知道是否有辦法在mongo控制檯命令中執行以下操作,而不是多個find
和update
調用。基於id更新數組對象?
{
"_id" : ObjectId("50b429ba0e27b508d854483e"),
"array" : [
{
"id" : "1",
"letter" : "a"
},
{
"id" : "2",
"letter" : "b"
}
],
"tester" : "tom"
}
我想用這個新的數組項
{
"id": "2",
"letter": "c"
}
我用這個更新的對象,addToSet
是有限的,它不會插入一項的數組,如果它已經存在,但它將不會基於標識符更新項目。在這種情況下,我真的很想根據id
更新此條目。
db.soup.update({
"tester": "tom"
}, {
$addToSet: {
"array": {
"id": "2",
"letter": "c"
}
}
});
這給了我:
{
"_id" : ObjectId("50b429ba0e27b508d854483e"),
"array" : [
{
"id" : "1",
"letter" : "a"
},
{
"id" : "2",
"letter" : "b"
},
{
"id" : "2",
"letter" : "c"
}
],
"tester" : "tom"
}
當我真正想要的是:
{
"_id" : ObjectId("50b429ba0e27b508d854483e"),
"array" : [
{
"id" : "1",
"letter" : "a"
},
{
"id" : "2",
"letter" : "c"
}
],
"tester" : "tom"
}
這是一個很好的一個。我今晚學到了一些東西。 – ddoxey
這太好了。我只是意識到這就是我所擁有的。現在更復雜的問題是,我怎樣才能以某種方式將新對象例如'{「id」:3,「letter」:「d」}'推到數組中?我是否必須以編程方式將請求排序?如果它存在,如果不是'$ push',使用'$ set'? – ThomasReggi
@ThomasReggi如果你作爲一個單獨的問題提出這個問題會更好。 – JohnnyHK