自己一直想要用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
及刚刚所使用的,用于回调,返回结果等。