我使用聚合来从mongodb获取记录.
$result = $collection->aggregate(array(
array('$match' => $document),
array('$group' => array('_id' => '$book_id', 'date' => array('$max' => '$book_viewed'), 'views' => array('$sum' => 1))),
array('$sort' => $sort),
array('$skip' => $skip),
array('$limit' => $limit),
));
Run Code Online (Sandbox Code Playgroud)
如果我无限制地执行此查询,则将获取10条记录.但我想保持限制为2.所以我想得到总记录数.如何进行聚合?请指教.谢谢
我有兴趣优化我正在使用MongoDB的"分页"解决方案.我的问题很直接.我通常会限制使用该limit()功能返回的文档数量.这迫使我发出一个没有该limit()函数的冗余查询,以便我也可以捕获查询中的文档总数,这样我就可以将其传递给客户端,让他们知道他们必须发出额外的请求.检索其余文件.
有没有办法将其压缩为1个查询?获取文档总数但同时仅使用limit()?检索子集?是否有不同的方式来思考这个问题,而不是接近它?
pagination mongodb casbah mongodb-query aggregation-framework
我会很感激,如果有人可以帮助我的东西:我需要一个正常的数据库查询,但正如我的收藏是非常大(10000个文档),我需要做的查询和使用$limit和$skip。我解决了那部分,但现在我想对所有文件进行计数,即使返回的文件较少。输出应该是这样的:
{
count: 1150,
data: [/*length of 50*/]
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?非常感谢。
所以我的代码是:
FindIterable<Document> findIterable = collection.find().skip(20).limit(10);
MongoCursor<Document> cursor = findIterable.iterator();
while (cursor.hasNext()) {
Document doc = cursor.next();
// My stuff with documents here
}
cursor.close(); // in finally block
Run Code Online (Sandbox Code Playgroud)
现在我想知道total count之前skip和之前的文件limit.
对于完全相同的问题有一个答案,但我mongo-java-driver v3.1.0和我使用的API是不同的.有没有方法count()或size()在这两个FindIterable和MongoCursor类.谢谢!
UPDATE
似乎唯一的解决方法是再次打电话给mongodb:collection.count正如@Philipp所说