2014-01-06 2 views
1

Ну, ответ, вероятно, нет, но мне любопытно спросить.Используйте два push-es в команде update

У меня есть документ, который имеет два уровня массива в нем:

{ '_id : '...' , events : [ urls : [], social_id : [] ], 'other_data' : '...' } 

Код ниже работ. Что такое update на конкретном событии, массив url и добавляет к этому значение event['event_url'] (python).

db.col.update(
      { 'f_id'  :  venue['id'], 
       "events.title" : find_dict["events.title"] }, 
      { '$addToSet': { 'events.$.urls': event['event_url']} } 
    ) 

Однако в этом же случае я хочу добавить социальный идентификатор, если он не существует.

db.col.update(
      { 'f_id'  :  venue['id'], 
       "events.title" : find_dict["events.title"] }, 
      { '$addToSet': { 'events.$.social_id': event['social_id']} } 
    ) 

Я блуждал, если можно объединить приведенные выше команды в одно и не запустить обновление дважды. Я ничего не нашел в документации, но я думаю, это стоит спросить.

ответ

1

Вы можете объединить два обновления в одну операцию путем включения обоих полей в $addToSet объекта:

db.col.update(
    { 'f_id': venue['id'], "events.title": find_dict["events.title"] }, 
    { '$addToSet': { 
     'events.$.urls.': event['event_url'], 
     'events.$.social_id.': event['social_id'] 
    }} 
) 
Смежные вопросы