переверните массив и сохраните его в новом поле во всех документах mongo коллекции

#mongodb #mongodb-query

#mongodb #mongodb-запрос

Вопрос:

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

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

Комментарии:

1. Может быть, заглянуть в агрегацию из MongoDB

Ответ №1:

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

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

Игровая площадка Mongo