MongoDB 计数集合 Node.js

12

我正在尝试通过Node.js与MongoDB交互,但在count()方法上遇到了一些问题。我正在使用node-mongodb-native,看起来我所做的应该是可以的。我的代码示例:

var get_total_num_docs = function(db_client, query, cb){
  db_client.collection(query['collection'], function(e, coll) {
    coll.find(query.params, query.options, function (e, cursor) {
      cursor.count(function (e, count) {
        console.log(count);
        return cb(e, count);
      });
    });
  });
};

我确定所有东西都存在(即coll和cursor都被定义了),但只有在我的query.params字段为空时才能工作(即查找整个集合的计数)。所以,如果我尝试使用任何选择器运行查找操作,查找将起作用,但然后它拒绝对返回的游标进行计数。从我在网上阅读的内容来看,这似乎是正确的方法,但显然出了些问题。感谢任何和所有的帮助!


当您说它拒绝计数时,您指的是什么?它是给您错误的计数还是抛出了错误? - Tim Gautier
就是它根本就不停止,也就是传递给count的回调函数从来没有被调用。我已经运行了大约十分钟,但它就是不停止。coll.find调用只需要很短的时间,但计数出现了问题。 - MrJaeger
你尝试过对收到的每个错误对象进行“console.log”记录吗?还有使用了哪些查询参数和选项? - user1207456
如果没有实际参数传递,很难理解正在发生什么。您还应该打印出任何错误信息。有时这些问题与人们在查询完成之前关闭数据库有关。 - christkv
看一下这篇文章-获取计数的方法非常相似。https://dev59.com/mYLba4cB1Zd3GeqPjMUS - Matt
使用db.collection.stats()怎么样?它会返回对象计数吗? - Risto Novik
1个回答

25

如果您不需要光标,应该像这样编写代码:

var get_total_num_docs = function(db_client, query, cb){
  db_client.collection(query['collection'], function(e, coll) {
    coll.find(query.params, query.options).count(function (e, count) {
      console.log(count);
      return cb(e, count);
    });
  });
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接