Обновление встроенного массива и объектов в Mongo

#mongodb #nosql

#mongodb #nosql

Вопрос:

В Mongo у меня есть коллекция сообщений, и в каждом сообщении есть комментарии, которые вставляются с идентификатором пользователя, именем пользователя и электронной почтой пользователя.

 - post
    - comments
           - user_id name email
  

Мне было интересно, как я могу обновить все электронные письма, которые связаны с определенным идентификатором?

Комментарии:

1. пока вы можете проголосовать за этот JIRA: jira.mongodb.org/browse/SERVER-1243

Ответ №1:

В настоящее время вам придется сначала извлекать комментарии, а затем обновлять электронные письма.

В зависимости от того, какой клиент вы используете, вот mongoid пример:

 comments = post.comments
comments.update_attributes(:email => "a@b.c")
  

Также уже существует «Использовать позиционный оператор для обновления всех элементов в массиве» JIRA, который после реализации позволит вам сделать это одним выстрелом.

Комментарии:

1. эта функция еще не запланирована;(

Ответ №2:

Вы пробовали использовать позиционный оператор $, это единственный способ обновить соответствующие вспомогательные документы (embedded docs) docs.

Комментарии:

1. это не сработает в случае, если в коллекции комментариев будет более одного пользователя с одинаковым email. Он обновит первый элемент, соответствующий позиции.