在MongoDB中计算滞后向量



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

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

有没有办法生成查询结果,该结果将是:

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

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

您可以使用聚合框架来做到这一点,但恕我直言,在客户端/应用程序端计算时会更容易、更灵活。

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 个元素的数组 A,我们需要创建 N-1 个元素的数组 B =>

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

最新更新