问题描述我想拿到跟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的效率在数据量大的时候都不怎么样,不建议这么设计。
- 1 回答
- 0 关注
- 1163 浏览
添加回答
举报
0/150
提交
取消