【问题标题】:Count documents with given field value problem计算具有给定字段值问题的文档
【发布时间】:2019-09-21 10:04:45
【问题描述】:

我对@9​​87654321@的计数函数的返回值有一个问题;即我的程序应该返回整数值(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版本,node是v10.15.3。

【问题讨论】:

    标签: javascript node.js mongodb callback robo3t


    【解决方案1】:

    代码中应该有多个回调,而不仅仅是在结尾

    参考这个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)
    

    【讨论】:

      【解决方案2】:

      Promise 和回调有不同的语法。您可以查看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);
      }
      

      注意asyncfunction之前,await在调用数据库函数之前。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-26
        • 1970-01-01
        • 2022-11-22
        • 2019-11-16
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多