计算MongoDB中的滞后向量

时间:2016-06-05 19:30:58

标签: mongodb

有没有办法计算MongoDB数组的滞后数组?例如,如果我有一份文件:

{id: 542532gsegsegt32t2,
values: [1, 6, 2, 45, 6]
}

有没有办法生成查询结果:

{values_lay : [5, -4, 43, -51]}

计算为[6-1, 2-6, etc...] ... 感谢您的任何建议。

1 个答案:

答案 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);
})