node.js - MongoDB count()获取表长度,解决Promise {<pending>}

  自己一直想要用node操作db.count()去获取某个表的长度,奈何用collection.find().count()却又一直获取不到,查看了许多文章,都没有什么详细的解释,官方文档也是吧啦吧啦一大堆。。。

错误源头


var collection=client.db(UrlPath).collection(collectionname)
var total=collection.find().count();
console.log(total);

// 这里打印的 一直都为Promise { <pending> },并没有返回需要的数值

如何解决

  报错为Promise {<pending >},其意思就是告诉我们此为promise,需要用 then接收,于是乎:


var totalpage;
const p = function(){
return new Promise((resolve) => {
totalpage= collection.find().count();
resolve(totalpage)
})
};
p().then(val => {
console.log(val);
// 打印的即为需要的表长度
})

  Promise {<pending >}成功解决,此问题还可使用async await解决,这里不过多叙述。

  但是咱们还是没有直接用count()解决问题啊!本着初心的态度,又认真的查看的文档,大胆的尝试,最后发现问题所在 - - - - 原来只需要加一个回调函数就行了,collection.find().count()是针对数据库的操作才可返回数值(比如终端里命令查询),在nodeJS里面只能用下面的方法:


collection.find().count(function(err, count) {
console.log(result)
//result 其实就是获取的数量值
})

原来如此简单!

对node操作MongoDB count()的扩展

在官方文档中count()一共有三个参数,即为count(applySkipLimit, options, callback)

applySkipLimit默认为true,其可控制count命令是否应对传入的进行限制和跳过设置。通俗的可理解为第二个参数options设置是否生效,true表示不生效,false表示生效。

options为一个对象,里面可包含:

  • skip:类型为num,查询时要跳过的数量
  • limit:类型为num,符合条件计算的最大数量。
  • maxTimeMS:类型为num,最大查找时间(毫秒),到点及停止
  • hint:类型为String,查询的索引名称,可适用于高级查询
  • readPreference:首选读取首选项

  例:如果一个表中有100条数据,则使用方法一可打印出全部数量,方法二只会打印出20,并且从第30条数据开始查询

// 方法一
var totalpage=collection.find().count(function (err, result) {
console.log(result);
});
// 方法二
var totalpage=collection.find().count(false,{
skip:30,
limit:20,
},function (err, result) {
console.log(result);
});

callback及刚刚所使用的,用于回调,返回结果等。

官方文档介绍count()

Author: ahuiyoのblog
Link: http://ahuiyo.cn/nodejs使用MongoDB-count方法获取表长度解决Promise-pending/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
支付宝打赏
微信打赏