0

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

你对如何解决这个问题有什么建议吗?

谢谢

4

1 回答 1

2

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

例如,您可以从 page * limit 导出“skip”值,例如 page 2 * limit 10 = skip 20。然后使用切片运算符应该可以正常工作。如果您“跳过”值超出了数组长度,那么您将在结果中返回一个空数组

于 2013-10-05T15:22:01.237 回答