Как вставить несуществующий документ, используя конвейер агрегации? - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу вставить произвольный документ в произвольную коллекцию, используя агрегацию вместо методов вставки.

До сих пор я пытался:

db.getCollection('someCollection').aggregate([
        { $replaceRoot: { newRoot: { a: 1} }},
        { $out: "outputCollection" }
    ])

db.getCollection('someCollection').aggregate([
        { $replaceRoot: { newRoot: { $ifNull: [ "$x", { a: 1} }},
        { $out: "outputCollection" }
    ])

вставить {a: 1} в коллекция "outputCollection". Запрос выполняется без ошибок, но в outputCollection нет документов.

Возможно ли / как создать документ без начала объединения с некоторыми существующими документами?

1 Ответ

0 голосов
/ 20 апреля 2020

$out сначала удалит целевую коллекцию, если она существует, поэтому ваша схема использования нескольких конвейеров agg вместо insert не будет работать.

Начиная с MongoDB 4.2, вы можете использовать $merge функция, которая имеет гораздо большую гибкость.

...