反转数组并将其存储在集合的所有mongo文档中的新字段中

时间:2019-04-18 07:11:24

标签: mongodb mongodb-query

我在mongo文档中有一个数组。我需要反转此数组,并在文档中添加一个新的数组(具有反转的值)。我需要对mongo集合中的所有文档执行此操作。我该怎么做? 我正在尝试使用以下脚本,但这会花费很多时间,因此需要一种更快的方法来实现

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

1 个答案:

答案 0 :(得分:1)

您可以使用$addFields生成新字段,并使用$reduce + $concatArrays扫描一个数组并创建反向数组。然后,您需要$out将聚合结果重定向到新集合中。如果指定相同的集合名称,则当前集合将被覆盖

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

Mongo Playground