我有一个3倍深的对象,我试图用
设置这是开始的对象
{
"_id": "53d905a709193fb6a0076fec",
"active": 1,
"article": null,
"category_id": null,
"clarification": null,
"id": 5279,
"language_id": 2,
"master_id": 1667,
"part_of_speech": "verb",
"rank": 279,
"word": "recordar",
"hasSound": false,
"extras": 0,
"conjugations": {
"present": [{
"prefixes": {
"1": "Yo"
},
"verb": "recuerdo",
"grammar": "1PS"
}],
"preterite": [{
"prefixes": {
"1": "Yo"
},
"verb": "recordé",
"grammar": "1PS"
}, {
"prefixes": {
"2": "Tu"
},
"verb": "recordaste",
"grammar": "2PS"
}, {
"prefixes": {
"3": "El",
"4": "Ella",
"6": "Usted"
},
"verb": "recordó",
"grammar": "3PS"
}, {
"prefixes": {
"7": "Nosotros"
},
"verb": "recordamos",
"grammar": "1PP"
}, {
"prefixes": {
"9": "Ellos",
"10": "Ellas",
"11": "Ustedes"
},
"verb": "recordaron",
"grammar": "3PP"
}],
"imperfect": [{
"prefixes": {
"1": "Yo"
},
"verb": "recordaba",
"grammar": "1PS"
}, {
"prefixes": {
"2": "Tu"
},
"verb": "recordabas",
"grammar": "2PS"
}, {
"prefixes": {
"3": "El",
"4": "Ella",
"6": "Usted"
},
"verb": "recordaba",
"grammar": "3PS"
}, {
"prefixes": {
"7": "Nosotros"
},
"verb": "recordábamos",
"grammar": "1PP"
}, {
"prefixes": {
"9": "Ellos",
"10": "Ellas",
"11": "Ustedes"
},
"verb": "recordaban",
"grammar": "3PP"
}],
"future": [{
"prefixes": {
"1": "Yo"
},
"verb": "recordaré",
"grammar": "1PS"
}, {
"prefixes": {
"2": "Tu"
},
"verb": "recordarás",
"grammar": "2PS"
}, {
"prefixes": {
"3": "El",
"4": "Ella",
"6": "Usted"
},
"verb": "recordará",
"grammar": "3PS"
}, {
"prefixes": {
"7": "Nosotros"
},
"verb": "recordaremos",
"grammar": "1PP"
}, {
"prefixes": {
"9": "Ellos",
"10": "Ellas",
"11": "Ustedes"
},
"verb": "recordarán",
"grammar": "3PP"
}]
}
}
这是$ set对象。 collection.update({id: id}, {$set: obj})
;
var obj = {
"conjugations.present.0.prefixes.1": "Yo",
"conjugations.present.0.verb": "recuerdo",
"conjugations.present.0.grammar": "1PS"
}
1
然后这是更新后的对象
{
"_id": "53d905a709193fb6a0076fec",
"active": 1,
"article": null,
"category_id": null,
"clarification": null,
"id": 5279,
"language_id": 2,
"master_id": 1667,
"part_of_speech": "verb",
"rank": 279,
"word": "recordar",
"hasSound": false,
"extras": 0,
"conjugations": {
"present": {
"0": {
"prefixes": {
"1": "Yo"
},
"verb": "recuerdo",
"grammar": "1PS"
}
}
}
}
由于某种原因,现在,变形是一个对象,而不是一个数组,它会杀死其余的变形对象。从文档看起来我应该能够使用"conjugations.present.0..."
更新完整的共轭对象的特定部分,但是不是设置第0个数组元素,而是将它设置为具有键0的对象
答案 0 :(得分:0)
首先,您需要为您的案例使用“$ set”运算符。而不是在conjugations.present[0]
中设置每个键,为什么不重新定义整个conjugations.present[0]
对象?我建议做以下事情:
db.yourcollection.update(
{_id : "someId"},
{$set : {"conjugations.present.0" :
{
"prefixes": {
"1": "Yo"
},
"verb": "recuerdo",
"grammar": "1PS"
}
}
}
)
这将修改conjugations.present
中的第0个元素。我将你的物品导入我的机器,为我工作。