我想在某些条件下检索包含指定记录的列表,并且只检索之前的一些记录以及该记录之后的一些记录。有没有解决方案?
例如,我有一个MongoDB模式{id,date,section} 数据集:
100, 26 Aug 2014 11:00, A
110, 26 Aug 2014 11:01, A
140, 26 Aug 2014 12:00, A
141, 27 Aug 2014 12:00, B
200, 30 Aug 2014 11:00, A
210, 01 Sep 2014 11:01, B
290, 02 Sep 2014 12:00, A
300, 26 Sep 2014 12:00, A
301, 27 Oct 2014 12:00, B
302, 30 Oct 2014 11:23, A
410, 01 Oct 2014 15:01, B
590, 02 Oct 2014 12:00, A
600, 26 Nov 2014 00:00, A
我想获得一个列表,其中包含一个唯一的id = 300和之前的3条记录以及该记录之后的3条记录,其中id = 300,按照A部分的日期排序。
输出:
140, 26 Aug 2014 12:00, A
200, 30 Aug 2014 11:00, A
290, 02 Sep 2014 12:00, A
300, 26 Sep 2014 12:00, A <-- middle
302, 30 Oct 2014 11:23, A
590, 02 Oct 2014 12:00, A
600, 26 Nov 2014 00:00, A
我有一个愚蠢的方法:
是否有更好的方法可以在查询中检索此类列表或获得更好的性能?谢谢。
答案 0 :(得分:-1)
$skip and $limit in aggregation framework
以下是使用跳过和限制的一个很好的示例,它可以帮助您实现SELECT TOP X
或LIMIT X
注意:我假设你想根据这个问题的标记使用聚合框架。
我相信应该这样做
x = 300;
db.user.aggregate({$match : { "id" : {$lte: x+10,$gte: x-10 }},{$sort : {"date": 1 }}});
答案 1 :(得分:-1)
让您的架构名称为USER
。您可以使用下面的mongo db查询来获取结果
$sort
功能:
参考文档:$Sort Documentation
查询将是:
db.user.aggregate({$match : { "id" : 300}},{$sort : {"date": 1 }},{$skip : 0},{$limit : 10});
第一次查询后 $skip
值将是您的limit
值
db.user.aggregate({$match : { "id" : 300}},{$sort : {"date": 1 }},{$skip : 10},{$limit : 10});