Pymongo, как правильно использовать $push для обновления существующего документа
Я делаю что-то не так или не понимаю $push (возможно, не понимаю). В любом случае у меня есть следующий документ:
{ "_id" : ObjectId("501c83051d41c8753e000000"),
"node" : "denver",
"enc" : { "environment" : "production", "classes" : { "denver" : "" } },
"inherit" : "default" }
И я пытаюсь сделать документ
{ "_id" : ObjectId("501c83051d41c8753e000000"),
"node" : "denver",
"enc" : { "environment" : "production",
"classes" : { "denver" : "", "boulder" : ""} },
"inherit" : "default" }
Вот как выглядит мое обновление:
col.update({ 'node' : 'denver'},
{ '$push': { 'enc.classes' : {'boulder': ''}}},
True)
Я не получаю сообщение об ошибке, но документ никогда не обновляется. Если я изменю $ push на $set, то денвер заменяется на валун.
Спасибо за любую помощь.
2 ответа
Решение
Этот запрос работает.
db.foo.update({"node": "denver"}, {"$set": {"enc.classes.boulder": ""}}
$push
в этом случае не работает, потому что вы пытаетесь использовать функцию массива для объекта.
Использовать $push
вам нужно изменить структуру данных следующим образом:
{
"_id" : ObjectId("501c83051d41c8753e000000"),
"node" : "denver",
"enc" : {
"environment" : "production",
"classes" : [
"denver"
]
},
"inherit" : "default"
}
Тогда ваш запрос будет:
col.update(
{
'node' : 'denver'
},
{
'$push': {
'enc.classes' : 'boulder'
}
},
True
)