MongoDB在查找结果

时间:2017-01-03 23:01:33

标签: node.js mongodb mongoose

我正在使用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,我提到这个字段,因为我认为它可以帮助解决方案。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用comparison query operators,特别是$gte$lte,使用seq作为比较的偏移量。

尝试:

var seqOffset = 1992;
db.events.find( { seq: { $gte: seqOffset - 20, $lte: seqOffset + 20 } } );

您无法获得正好40个事件,因为正如您所提到的seq可能会跳过数字。