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

时间:2019-05-02 20:43:10

标签: javascript node.js mongodb callback robo3t

我对db.collection.find.count()的计数函数的返回值有一个问题;也就是说,我的程序应该返回整数值(根据特定条件,db.collection中的文档数),但是函数返回Promise,我不知道该如何在回调函数中使用。

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

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

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

2 个答案:

答案 0 :(得分:0)

承诺和回调具有不同的语法。您可以检查Promise的工作原理here。您可能还想使用回调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);
}

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

答案 1 :(得分:0)

theres应该是代码中的多个回调,而不仅仅是结尾处

请参阅此http://mongodb.github.io/node-mongodb-native/3.2/api/Collection.html#count

以及节点驱动程序的计数功能不需要在游标0上进行操作

因此您的代码应该看起来像

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)