如何在 MongoDB 中执行超前和滞后

How to perform lead and lag in MongoDB

我正在使用 STudio 3T,我有这样的查询:

select [Dashbo],lead([Dashbo]) over(order by [Entered Date])
from ATest_prevback;

这给我带来了错误。如何在 MongoDB 中执行此操作?有人可以给我举个例子吗?

谢谢, 阿迪

很遗憾,不可能。

解决方法:使用计算数据创建 Materialized view

运行 中 MongoDB Shell:


var prev = null;
db.ATest_prevback.find({}).sort({field:1}).forEach(function(curr){
    db.materialized_view.insert({curr:curr.field, prev:(prev ? prev.field : 0)})
    prev = curr;
})

运行“假”leadlag 查询:

db.materialized_view.aggregate([
    {$match:{$expr:{$eq:["$curr", "$prev"]}}}
])

从MongoDBv5.0+开始,可以使用$shift in $setWindowFields.

db.collection.aggregate([
  {
    "$setWindowFields": {
      "partitionBy": null,
      "sortBy": {
        "entered_date": 1
      },
      "output": {
        lag: {
          $shift: {
            output: "$Dashbo",
            by: -1,
            default: "Not available"
          }
        },
        lead: {
          $shift: {
            output: "$Dashbo",
            by: 1,
            default: "Not available"
          }
        }
      }
    }
  }
])

这里是Mongo playground供您参考。