有没有办法计算MongoDB数组的滞后数组?例如,如果我有一份文件:
{id: 542532gsegsegt32t2,
values: [1, 6, 2, 45, 6]
}
有没有办法生成查询结果:
{values_lay : [5, -4, 43, -51]}
计算为[6-1, 2-6, etc...]
...
感谢您的任何建议。
答案 0 :(得分:1)
你可以使用聚合框架来实现它,但是当在客户端/应用程序端计算时,它会更容易和更灵活。
db.collection.aggregate([
{
$project:
{
values_lay: [
{ $subtract: [{$arrayElemAt: [ "$values", 1 ]}, { $arrayElemAt: [ "$values", 0 ]}]},
{ $subtract: [{$arrayElemAt: [ "$values", 2 ]}, { $arrayElemAt: [ "$values", 1 ]}]},
{ $subtract: [{$arrayElemAt: [ "$values", 3 ]}, { $arrayElemAt: [ "$values", 2 ]}]},
{ $subtract: [{$arrayElemAt: [ "$values", 4 ]}, { $arrayElemAt: [ "$values", 3 ]}]},
],
}
}
])
修改
我的假设:因为我们有N个元素的arrayA,我们需要创建N-1个元素的arrayB =>
arrayB[1] = arrayA[2] - arrayA[1]
arrayB[n-2] = arrayA[n-1] - arrayA[n-2]
arrayB[n-1] = arrayA[n] - arrayA[n-1]
可以在服务器端/客户端使用的一段js代码
db.hellob.find().forEach(function (doc) {
var arraySize = doc.values.length;
doc.results = [];
for (var i = 0; i < arraySize - 1; i++) {
doc.results.push(doc.values[i + 1] - doc.values[i])
};
printjson(doc);
})