mongoDB 获取过滤后的总条数

问题描述

我想拿到跟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总条数?


DIEA
浏览 1129回答 1
1回答

素胚勾勒不出你

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

相关分类

MongoDB