我在mongo文档中有一个数组。我需要反转此数组,并在文档中添加一个新的数组(具有反转的值)。我需要对mongo集合中的所有文档执行此操作。我该怎么做? 我正在尝试使用以下脚本,但这会花费很多时间,因此需要一种更快的方法来实现
db.collections.find().forEach(function (doc) {
var loc = [ doc.sourceArray[1], doc.sourceArray[0] ];
db.collections.update(doc, { $set: {destinationArray: loc } });
})
答案 0 :(得分:1)
您可以使用$addFields生成新字段,并使用$reduce + $concatArrays扫描一个数组并创建反向数组。然后,您需要$out将聚合结果重定向到新集合中。如果指定相同的集合名称,则当前集合将被覆盖
db.collection.aggregate([
{
$addFields: {
reversedArray: {
$reduce: {
input: "$array",
initialValue: [],
in: {
$concatArrays: [ ["$$this"], "$$value" ]
}
}
}
}
},
{
$out: "collection"
}
])