计算具有给定字段值问题的文档

Count documents with given field value problem

我有一个关于 db.collection.find.count() 的计数函数的 return 值的问题;即我的程序应该 return 整数值(db.collection 中的文档数按某些标准),但是函数 returns Promise 我不知道如何在回调中使用功能。

我尝试在 count() 方法中创建回调函数,如 count(function(err,res){ if(err) console.log('Error') else count1=res;}),但它不起作用。我还搜索了 Whosebug 和 mongodb 文档,并尝试了一些其他解决方案,但也没有帮助。 (但是当我在 robomongo 中尝试 db.collection('blogCollection').find("author":"user123").count() 时,它正确地 运行 并显示了查询结果)

这是我的代码var count1=database.collection("blogCollection").find({"author":id}).count();

其中 count1 应该是 author 字段等于 id 值的文档数。在此先感谢您的帮助。:) 我的 mongodb 是 3.2 版本,node 是 v10.15.3.

承诺和回调具有不同的语法。您可以查看 Promise 的工作原理 here. You may also want to check the difference with callbacks here.

在你的情况下,你可以像这里一样使用 Promise

database.collection("blogCollection").find({"author":id}).count()
  .then((count1) => {
    console.log(count1);
});

您也可以选择使用 ES6 Async/Await:

async function count() {
  const count1 = await database.collection("blogCollection").find({"author":id}).count();
  console.log(count1);
}

注意function前的async,调用数据库函数前的await

你的代码中应该有多个回调,而不仅仅是在最后

参考这个Callback at MongoDB Operation With Node.js

以及节点驱动程序的计数功能不需要对游标进行操作http://mongodb.github.io/node-mongodb-native/3.2/api/Collection.html#count

所以你的代码应该看起来像

database.collection("blogCollection", (err, col) => {
    col.count(query,opt,  (err,count )=> count1 = count)
)

异步等待

const col = await database.collection("blogColelction")
const count1 = await col.count(query, opt)