Javascript MongoDB计数和结果

Javascript MongoDB计数和结果,javascript,mongodb,mongodb-query,Javascript,Mongodb,Mongodb Query,如果有人能帮助我,我将不胜感激:我需要对数据库进行常规查询,但由于我的收藏量很大(10000个文档),我需要进行查询并使用$limit和$skip。我解决了那部分问题,但现在我想计算所有文档的数量,即使返回的文档更少。输出应如下所示: { count: 1150, data: [/*length of 50*/] } 有人能帮忙吗?非常感谢。因为您提到您正在进行一个普通的查询,所以进行聚合是不明智的。在这里,find()将是一个更好的选项。相反,您可以使用find查询本身。

如果有人能帮助我,我将不胜感激:我需要对数据库进行常规查询,但由于我的收藏量很大(10000个文档),我需要进行查询并使用
$limit
$skip
。我解决了那部分问题,但现在我想计算所有文档的数量,即使返回的文档更少。输出应如下所示:

{
     count: 1150,
     data: [/*length of 50*/]
}

有人能帮忙吗?非常感谢。

因为您提到您正在进行一个普通的查询,所以进行聚合是不明智的。在这里,find()将是一个更好的选项。相反,您可以使用find查询本身。在mongoDB控制台中执行此操作的命令如下所示:

> var docs = db.collection.find().skip(10).limit(50)
> docs.count()
189000
> docs.length()
50
正如前面提到的,您可以使用count,因为它忽略了skip和limit。检查:


顺便说一句,这是另一个StackOverflow问题的重复:

我认为不使用聚合就不可能在单个查询中获得结果的总计数以及分页数据

您可能可以通过聚合来实现这一点,但由于您提到,您的集合非常大,因此您应该避免它,并将查询分为两部分。我为您提供了一个考虑
用户
集合具有
评级
字段且记录超过10000条的示例:

var finalResult = {};

var query = {
    rating: {$gt: 2}
};

// Get first 50 records of users having rating greater than 2
var users = db.user.find(query).limit(50).skip(0).toArray();
// Get total count of users having rating greater than 2
var totalUsers = db.user.cound(query);

finalResult.count = totalUsers;
finalResult.data = users;
您的最终输出可以是:

finalResult == {
     count: 1150,
     data: [/*length of 50 users*/]
}
希望,这对你有意义。一些著名的技术,比如Internal,就是这样实现分页的

另一种更清洁的方法可以是:

var finalResult = {};

var query = {
    rating: {$gt: 2}
};

var cursor = db.user.find(query).limit(50).skip(0);
// Get total count of users having rating greater than 2
// By default, the count() method ignores the effects of the cursor.skip() and cursor.limit()    
finalResult.count = cursor.count();;
finalResult.data = cursor.toArray();

您可以使用一个查询本身来实现这一点。在Node.js和Express.js中,您必须像这样使用它才能使用“count”函数和toArray的“result”

然后可以像这样运行两个函数(一个嵌套在另一个中)


mongodb 3.x中可能存在的副本这仍然有效吗?我知道,数组不是函数
var curFind = db.collection('tasks').find({query});
curFind.count(function (e, count) {    
// Use count here    
    curFind.skip(0).limit(10).toArray(function(err, result) {    
    // Use result here and count here    
    });
});