1

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

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

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

谢谢,阿迪

4

2 回答 2

1

不幸的是,不可能。

解决方法:使用计算数据创建实体化视图。

在 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"]}}}
])
于 2021-12-13T22:15:00.280 回答
1

从 MongoDB v5.0+ 开始,可以通过在$setWindowFields中使用$shift来完成。

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游乐场供您参考。

于 2021-12-18T01:42:11.850 回答