#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"
}
])