Обновление вложенных документов в mongodb
-
16-09-2019 - |
Вопрос
Допустим, у меня есть структура данных что-то вроде этого:
{
'name': 'test',
'anotherdoc': {
'something': 'someval',
'somenum': 1
}
}
Теперь предположим, что я хотел что-то установить.Изначально я думал, что это будет сделано следующим образом:
collection.update({'_id': myid}, {$set: {'anotherdoc.something': 'somenewval'});
Это, однако, кажется неверным.Он действительно помещает туда некоторые данные, но делает это странным образом.В данном случае это закончилось бы вот так:
[
{
'name': 'test',
'anotherdoc': {
'something': 'someval',
'somenum': 1
}
},
['anotherdoc.something', 'someval']
]
Конечно, это не то, что я искал.
Решение
Следующее работает для меня из оболочки mongo - так что я не уверен, что произошло выше для вас.Попробуйте это и посмотрите, сработает ли это?Если это так, я бы сказал, возьмите последнюю версию кода mongo на случай, если раньше что-то было проблематичным.
x = { 'name': 'test', anotherdoc: { 'something': 'someval', somenum : 1 } }
> x
{"name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> collection = db.foo;
test.foo
> collection.insert(x)
> collection.find()
{"_id" : ObjectId( "4a61b6711591f41f0f1bc5ff") , "name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> x
{"name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> x._id
> x = collection.findOne()
{"_id" : ObjectId( "4a61b6711591f41f0f1bc5ff") , "name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> collection.update({'_id': x._id}, {$set: {'anotherdoc.something': 'somenewval'}} )
> collection.find()
{"_id" : ObjectId( "4a61b6711591f41f0f1bc5ff") , "name" : "test" , "anotherdoc" : {"somenum" : 1 , "something" : "somenewval"}}
>
Как упоминалось выше, форумы MongoDB, вероятно, просматриваются быстрее (или попробуйте IRC).
Другие советы
Вам лучше спросить об этом в googlegroup пользователя mongodb.Ответ на ваш вопрос находится здесь http://groups.google.com/group/mongodb-user/msg/583d37ef41ef5cca?hl=en