我正在使用 STudio 3T,我有这样的查询:
select [Dashbo],lead([Dashbo]) over(order by [Entered Date])
from ATest_prevback;
这给了我和错误。如何在 MongoDB 中执行此操作?有人可以给我一个例子吗?
谢谢,阿迪
我正在使用 STudio 3T,我有这样的查询:
select [Dashbo],lead([Dashbo]) over(order by [Entered Date])
from ATest_prevback;
这给了我和错误。如何在 MongoDB 中执行此操作?有人可以给我一个例子吗?
谢谢,阿迪
不幸的是,不可能。
解决方法:使用计算数据创建实体化视图。
在 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;
})
运行“假”lead
和lag
查询:
db.materialized_view.aggregate([
{$match:{$expr:{$eq:["$curr", "$prev"]}}}
])
从 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游乐场供您参考。