我正在使用MongoDB,(Mongoose在Node.js上)我有一个非常大的事件数据库,每个事件都有一个字段seq
(序列),事件的顺序。
我想让我的用户找到给定事件的所有事件。
例如: 用户正在搜索事件“ButtonClicked”,我应该返回此事件发生的所有位置,在此示例中说[239,1992,5932]
这很简单,我只需搜索请求的事件,然后返回seq
字段即可。
现在我想让用户在之前查看20个事件,在特定seq
之后查看20个事件。
如果我能做到这样的话会很棒:
db.events.find( { id:"ButtonClicked", seq: 1992 } ).before(20).after(20);
我该怎么做?
请注意,字段seq
可能以任何数字开头,并跳过数字,但它是增量的!
例如:[3,4,5,6,7,12,13,15,56,57 ...]
另外,请注意解决方案可以忽略seq
,我提到这个字段,因为我认为它可以帮助解决方案。
谢谢!
答案 0 :(得分:0)
您可以使用comparison query operators,特别是$gte
和$lte
,使用seq
作为比较的偏移量。
尝试:
var seqOffset = 1992;
db.events.find( { seq: { $gte: seqOffset - 20, $lte: seqOffset + 20 } } );
您无法获得正好40个事件,因为正如您所提到的seq
可能会跳过数字。