如何在一个mongodb查询中限制嵌入式数组中的元素数
我有以下mongo文件,代表网站和网站上的链接如何在一个mongodb查询中限制嵌入式数组中的元素数,mongodb,Mongodb,我有以下mongo文件,代表网站和网站上的链接 {"website": "id":"123456", "links":[ "link1","link2","link3",..."link1000" ] } 我想返回id找到的特定文档中数量有限的链接,以支持分页,例如page=1,limit=100应该返回前100个链接。 我试过这样的东西,但没用。有没有办法限制子文档的数量 String query="
{"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操作符应该可以正常工作。如果“跳过”值超出了数组长度,则在结果中会返回一个空数组可能与感谢您的建议重复。我错误地传递了页码而不是跳过值,结果总是错误的。