为了账号安全,请及时绑定邮箱和手机立即绑定

mongoDB 获取过滤后的总条数

mongoDB 获取过滤后的总条数

DIEA 2019-01-30 10:47:07
问题描述我想拿到跟query条件匹配的条目总数total,怎么拿比较好?我现在的做法是外面再套一层查询,感觉这样不好.db.collection('netdatas').find(query).count().then(total=>{     db.collection('netdatas').find(query).sort(sort).skip((page - 1)*num).limit(num).toArray().then(docs=>{     ws.send(JSON.stringify({         cmd:"query_netdatas",         data:{             num,             page,             total,             records:docs         }     })) }) })看了下可以用aggregation,但是沒搞定~请问怎么比较方便拿到query过滤之后的total总条数?
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

从数据库的角度,这就是2件完全不同的事情。道理也很简单:如果你只需要前面N条,数据库找出前面的就可以收手了。但是你要找出total,数据库就需要找出所有的符合条件的数据,后者显然要比前者重得多。但后者又只是计数,前者则是要找出真实的文档……总之,完全不同的执行计划,不可能一次查询同时得到。
如果要说改进的话,建议看看Promise,两次查询是可以同时异步执行的,不用先执行完一个再执行另外一个。
最后从设计的角度,使用这种方式在大数据场景往往是不合适的,count的效率和skip/limit的效率在数据量大的时候都不怎么样,不建议这么设计。

查看完整回答
反对 回复 2019-01-30
  • 1 回答
  • 0 关注
  • 1120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信