如何在一个mongodb查询中限制嵌入数组中的元素数量

时间:2013-10-04 21:19:11

标签: mongodb

我有以下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个结果,所以我必须在创建查询之前检查链接数。

您对如何解决此问题有任何建议吗?

由于

1 个答案:

答案 0 :(得分:2)

正确的方法是使用$slice运算符。为了便于分页,您必须更改确定“跳过”和“限制”的方法。

例如,您可以从页面*限制中获取“跳过”值,例如第2页*限制10 =跳过20.然后使用切片运算符应该可以正常工作。如果你“跳过”值超出数组长度,那么你将在结果中找回一个空数组