Spring存储库中的MongoDB查询:限制过滤后的记录数

时间:2013-11-12 20:42:06

标签: spring mongodb

我在Spring存储库中使用“@Query”注释,有以下查询(为简单起见,使用硬编码参数):

@Query(“{$ query:{status:'Failed'},$ maxScan:10}”)

此查询的目的是从数据库中读取状态为“失败”的前10条记录(记录是系统作业)。但是,查询将首先读取10条记录,然后从这10条记录中读取状态为“失败”的记录。

我需要在应用过滤器之后将限制应用于结果集,而不是之前。如何修改上述查询以返回应用过滤器逻辑后读取的结果集的前10条记录,即状态为“失败”的前10条记录?

提前致谢。

2 个答案:

答案 0 :(得分:14)

使用Spring Data MongoDB时,我认为通常你会想要使用Pageable接口来进行这些查询。例如:

@Query("{status: 'Failed'}")
List<Record> findFailedRecords(Pageable pageable);

// or even better without the @Query annotation just:

List<Record> findByStatus(String status, Pageable pageable);

然后,致电:

yourRecordRepo.findFailedRecords(new PageRequest(0, 10));

// or using the other method:

yourRecordRepo.findByStatus("Failed", new PageRequest(0, 10));

这将获取10个失败记录的第一页。

答案 1 :(得分:0)

$limit就是您所需要的。

限制 - http://docs.mongodb.org/manual/reference/method/cursor.limit/#cursor.limit

mongos> db.test.find()
{ "_id" : 1, "status" : "Failed" }
{ "_id" : 2, "status" : "Pass" }
{ "_id" : 3, "status" : "Failed" }
{ "_id" : 4, "status" : "Pass" }
{ "_id" : 5, "status" : "Failed" }
{ "_id" : 6, "status" : "Pass" }
{ "_id" : 7, "status" : "Failed" }
{ "_id" : 8, "status" : "Pass" }
{ "_id" : 9, "status" : "Failed" }
{ "_id" : 10, "status" : "Pass" }
mongos> db.test.find({status: "Failed"})
{ "_id" : 1, "status" : "Failed" }
{ "_id" : 3, "status" : "Failed" }
{ "_id" : 5, "status" : "Failed" }
{ "_id" : 7, "status" : "Failed" }
{ "_id" : 9, "status" : "Failed" }
mongos> db.test.find({status: "Failed"}).limit(3)
{ "_id" : 1, "status" : "Failed" }
{ "_id" : 3, "status" : "Failed" }
{ "_id" : 5, "status" : "Failed" }