Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在一个mongodb查询中限制嵌入式数组中的元素数_Mongodb - Fatal编程技术网

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

如何在一个mongodb查询中限制嵌入式数组中的元素数,mongodb,Mongodb,我有以下mongo文件,代表网站和网站上的链接 {"website": "id":"123456", "links":[ "link1","link2","link3",..."link1000" ] } 我想返回id找到的特定文档中数量有限的链接,以支持分页,例如page=1,limit=100应该返回前100个链接。 我试过这样的东西,但没用。有没有办法限制子文档的数量 String query="

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

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


谢谢

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


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

可能与感谢您的建议重复。我错误地传递了页码而不是跳过值,结果总是错误的。