我正在嘗試更新MongoDB中與下面類似的嵌套文檔(縮寫爲簡潔)。在MongoDB中更新嵌套對象
{
"cols": "20",
"saveTime": "2014-06-15-10:44:09",
"rows": "20",
"gameID" : "66f2497c-7a2b-4210-a06b-80be0e6a8fd8",
"players": [
{
"id": "Inhuman",
"num": "1",
"color": "00ff00ff",
"name": "badComputer",
"type": "1"
},
<...>
],
"nodes": [
{
"g": "1",
"c": "0",
"r": "0",
"a": "0",
"o": ""
},
{
"g": "1",
"c": "0",
"r": "1",
"a": "0",
"o": ""
}
<...>
],
}
我所要做的是更新的節點之一。例如,我想改變的節點:(。)
{ "g": "1", "c": "0", "r": "0", "a": "0", "o": ""}
到
{ "g": "1", "c": "0", "r": "0", "a": "5", "o": ""}
我已經使用點嘗試符號,用$ set命令,鼻翼:
db.game.update({"gameID" : "66f2497c-7a2b-4210-a06b-80be0e6a8fd8"}, { $set: {"nodes.r":"0", "nodes.c":"0", "nodes.a":"5"}}),
但是這並沒有給我預期的行爲,因爲我正在使用相同的r和c值更新所有節點。這顯然不是我想要的,但我不知道如何更新此文檔的特定部分。有沒有人有任何想法如何做到這一點?
感謝您的信息,但一個問題。只有給定r和c(行和列)值的節點數組中只有一個元素。是否仍然有必要這樣做,或者orepor的答案在上面工作? – unaligned
@unaligned不,它不會工作,這就是爲什麼我向他們評論以及他們的理解。假設你正在尋找'{「g」:,「r」:1}'。除非使用'$ elemMatch',否則它確實匹配陣列中與條件匹配的元素的「文檔」。但是,除非使用'$ elemMatch',否則他實際上並不匹配數組的正確位置。鏈接的文檔顯示了其他示例。但是兩個屬性幾乎不會以這種方式匹配,除非偶然。 –
這工作完美。標記爲正確的答案。 – unaligned