Обновление встроенного документа в MongoDB - PullRequest
4 голосов
/ 06 декабря 2011

Мои документы структурированы следующим образом:

{_id: 1, country: 'USA', names: [{language: 'en', name: 'New York', state:'new'}, {language: 'es', name: 'Nueva York', state:'translated'}]}
{_id: 2, country: 'France', names: [{language: 'en', name: 'Paris', state:'new'}, {language: 'it', name: 'Parigi', state:'translated'}]}
...

Я хочу обновить состояние элемента для определенного языка и, если язык не существует, добавить соответствующий встроенный документ. Например, я хотел бы обновить элемент 1, чтобы установить state='new' для language='es', потому что этот язык существует:

{_id: 1, country: 'USA', names: [{language: 'en', name: 'New York', state:'new'}, {language: 'es', name: 'Nueva York', state:'translated'}]}

И я хотел бы добавить внедренный документ к пункту 2 с state='new' и language='fr', потому что он не существует:

{_id: 2, country: 'France', names: [{language: 'en', name: 'Paris', state:'new'}, {language: 'it', name: 'Parigi', state:'translated'}, {language: 'fr', name: 'Paris', state:'new'}]}

Как я могу это сделать?

Спасибо.

1 Ответ

2 голосов
/ 06 декабря 2011

Вам необходимо использовать позиционный оператор $. Подробнее см. http://www.mongodb.org/display/DOCS/Updating#Updating-The%24positionaloperator.

В вашем случае это будет

db.cities.update({'_id':1,'names.language':'es'},{$set:{'names.$.state':'new'}});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...