我有以下mongo文档代表网站及其上的链接。
{"website":
"id":"123456",
"links":[
"link1","link2","link3",..."link1000"
]
}
我希望从id找到的特定文档返回有限数量的链接,以支持分页,例如page = 1,limit = 100应返回前100个链接。 我试过这样的东西,但它不起作用。有什么办法可以限制子文档的数量吗?
String query="{'website.id:'"+id+"'}";
String fields="{links:1}";
DBCursor dbCursor=this.getCollection(crawlersCollection)
.find(this.query(query),this.query(fields)).skip(skip).limit(limit);
我尝试的另一种方法是使用$ slice
String fields="{'links':{'$slice':["+skip+","+limit+"]}}";
但是效果不好,因为它对分页不是很有用。例如,如果我有43个链接,page = 2且limit = 100将返回43个结果,所以我必须在创建查询之前检查链接数。
您对如何解决此问题有任何建议吗?
由于
答案 0 :(得分:2)
正确的方法是使用$slice
运算符。为了便于分页,您必须更改确定“跳过”和“限制”的方法。
例如,您可以从页面*限制中获取“跳过”值,例如第2页*限制10 =跳过20.然后使用切片运算符应该可以正常工作。如果你“跳过”值超出数组长度,那么你将在结果中找回一个空数组