我在Spring存储库中使用“@Query”注释,有以下查询(为简单起见,使用硬编码参数):
@Query(“{$ query:{status:'Failed'},$ maxScan:10}”)
此查询的目的是从数据库中读取状态为“失败”的前10条记录(记录是系统作业)。但是,查询将首先读取10条记录,然后从这10条记录中读取状态为“失败”的记录。
我需要在应用过滤器之后将限制应用于结果集,而不是之前。如何修改上述查询以返回应用过滤器逻辑后读取的结果集的前10条记录,即状态为“失败”的前10条记录?
提前致谢。
答案 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" }