инвертировать массив и сохранить его в новом поле во всех монго документах коллекции - PullRequest
1 голос
/ 18 апреля 2019

У меня есть один массив в монго-документе. Мне нужно перевернуть этот массив и добавить новый массив (с обратным значением) в документе. Мне нужно сделать это для всего документа в коллекциях монго. Как мне это сделать? Я пытаюсь с приведенным ниже сценарием, но это занимает много времени, поэтому нужен более быстрый способ сделать это

db.collections.find().forEach(function (doc) {
    var loc = [ doc.sourceArray[1], doc.sourceArray[0] ]; 
    db.collections.update(doc, { $set: {destinationArray: loc } });
})

1 Ответ

1 голос
/ 18 апреля 2019

Вы можете использовать $ addFields для генерации нового поля и $ redu * + $ concatArrays для сканирования одного массива и создания обращенного. Затем вам нужно $ out , чтобы перенаправить результаты агрегации в новую коллекцию. Если вы укажете одно и то же имя коллекции, текущая коллекция будет перезаписана

db.collection.aggregate([
    {
        $addFields: {
            reversedArray: {
                $reduce: {
                    input: "$array",
                    initialValue: [],
                    in: {
                        $concatArrays: [ ["$$this"], "$$value" ]
                    }
                }
            }
        }
    },
    {
        $out: "collection"
    }
])

Детская площадка Монго

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