Как добавить существующую коллекцию MongoDB с помощью оператора агрегации $ out? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть экземпляр MongoDB 4.0 Atlas, и мне нужно добавить результаты агрегирования в существующую коллекцию, не удаляя существующие элементы.

Мне нужно что-то вроде «mode: replaceDocuments» в $ out, но этот режим будет доступен только в MongoDB 4.2

Что я пытаюсь получить:

Источник 1 - существующая коллекция "A":

[{ "_id": "id_1", "a": 1 },
 { "_id": "id_2", "a": 2 }]

Источник 2 - данные результатов агрегации:

[{ "_id": "id_3", "a": 3 },
 { "_id": "id_4", "a": 4 }]

Результат - добавлены данные в существующую коллекцию "A":

[{ "_id": "id_1", "a": 1 },
 { "_id": "id_2", "a": 2 },
 { "_id": "id_3", "a": 3 },
 { "_id": "id_4", "a": 4 }]

1 Ответ

0 голосов
/ 21 июня 2019

В MongoDB v4.2 (в настоящее время v4.2.0-rc1) вы можете использовать Этап объединения $ 1004 * для объединения в существующую коллекцию.

Этап $merge:

  • Может выводить в коллекцию в той же или другой базе данных.
  • Создает новую коллекцию, если выходная коллекция еще не существуетсуществовать.
  • Может включать результаты (вставлять новые документы, объединять документы, заменять документы, сохранять существующие документы, сбой операции, обрабатывать документы с помощью настраиваемого конвейера обновления) в существующую коллекцию.
  • Можетвывод в заколоченную коллекцию.Коллекцию входных данных также можно отсеять.

Для вашего примера вы можете сделать следующее:

 db.collection.aggregate([ ...., 
               { "$merge" : { into: "A" } } // Has to be the last stage in the pipeline
 ]);

См. Также Сравнение с $ out

Существует множество вариантов использования для $merge:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...