Обновление вложенных документов в mongodb

mongodb

22812 просмотра

2 ответа

5937 Репутация автора

Скажем, у меня есть структура данных примерно так:

{
    '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']
]

Конечно, не то, что я искал.

Автор: defrex Источник Размещён: 17.07.2009 10:28

Ответы (2)


0 плюса

0 Репутация автора

Вы бы лучше спросили об этом в googlegroup пользователя mongodb. Ответ на ваш вопрос находится здесь http://groups.google.com/group/mongodb-user/msg/583d37ef41ef5cca?hl=ru.

Автор: Diego Sana Размещён: 18.07.2009 11:42

14 плюса

0 Репутация автора

Решение

Следующее работает для меня из оболочки Монго - поэтому я не уверен, что случилось с вами выше. Попробуйте это и посмотрите, работает ли это? Если это так, я бы сказал, возьмите последний код Монго на случай, если что-то было проблематично.

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).

Автор: dmerr Размещён: 18.07.2009 11:52
Вопросы из категории :
32x32