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

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


var collection=client.db(UrlPath).collection(collectionname)

var total=collection.find().count();
console.log(total);
// 这里打印的 一直都为Promise {  },并没有返回需要的数值

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


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

  Promise {}成功解决,此问题还可使用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()

你可能感兴趣的:(服务端类,前端旅途)