我对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。
答案 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
因此您的代码应该看起来像
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)