Ответ 1
Я использовал вывод из агрегации для вставки/слияния в коллекцию:
db.coll2.insert(
db.coll1.aggregate([]).toArray()
)
Я хочу скопировать и вставить результаты в существующую коллекцию, не удаляя эту коллекцию. Документация, по-видимому, предполагает, что это невозможно. Мне трудно поверить.
Функция уменьшения карты имеет "режимы вывода", в том числе "слияние", что делает то, что я хочу. Я ищу эквивалент для агрегации.
Новый этап $out
поддерживает вставку в коллекцию, но вместо замены он заменяет коллекцию. Если бы я сделал это, я бы (я думаю) должен был запустить еще одну карту, чтобы объединить ее в другую коллекцию, что кажется неэффективным.
Я что-то упустил или нет функции, отсутствующей в функции агрегации?
Я использовал вывод из агрегации для вставки/слияния в коллекцию:
db.coll2.insert(
db.coll1.aggregate([]).toArray()
)
Чтение документации отвечает на этот вопрос совершенно точно. Atm mongo не может делать то, что вы хотите.
Операция $out создает новую коллекцию в текущей базе данных, если ее еще нет. Коллекция не отображается до завершения агрегации. Если агрегация не удалась, MongoDB не создает коллекцию.
Если коллекция, указанная в операции $out, уже существует, то после завершения агрегации этап $out атомарно заменяет существующую коллекцию новой коллекцией результатов. Операция $out не изменяет никаких индексов, существовавших в предыдущей коллекции. Если агрегация не выполняется, операция $out не вносит изменений в предыдущую коллекцию.
Если вы не застряли на использовании операторов агрегирования, вы можете сделать инкрементное уменьшение карты в коллекции. Этот оператор позволяет объединить результаты в существующую коллекцию.
Смотрите следующую документацию:
http://docs.mongodb.org/manual/tutorial/perform-incremental-map-reduce/
Для тех, кто придет к этому более недавно, это доступно из версии 4.2, вы сможете сделать это с помощью оператора $ merge в конвейере агрегации. Это должен быть последний этап в разработке.
{ $merge: { into: "myOutput", on: "_id", whenMatched: "replace", whenNotMatched: "insert" } }