我正在开发一个节点项目,我在其中为网格应用过滤器和分页。
我需要找到的项目,查询中找到的总数以及Mongodb集合中的总项目。
我的查询就像(coffeescript):
projects.find(query).limit(10).skip(skip).select(q).exec (err, items) ->
projects.count().exec (err, count) ->
itemsTotals = count
itemsFound = items.length
但是如果我的查询返回的结果大于'limit'变量,则找到的项目数量是限制,所以或者我添加第三个查询,或者直接使用聚合框架。
我真的需要两个查询(projects.find和projects.count)吗?
可以使用单个mongoose查询获取两个值(找到的总数和总数)(并且可能直接在查询中限制返回项的结果)?
答案 0 :(得分:3)
我还没有找到更好的答案,但我发现这个选项值得一提。明显的缺点是DB正在返回更大的数据集。
projects.find(query).select(q).exec (err, items) ->
itemsTotals = items.length
items = items.slice(skip, 10 + skip)
itemsFound = items.length
我发现了here
答案 1 :(得分:1)
你做不到。您需要使用limit和count()执行find(),但考虑到您正在复制查询数量,那么您正在减慢系统速度。您可以将总长度存储到内存中,而不是执行count(),并在执行insert()时以原子方式递增它。当服务器启动时,执行count()来初始化变量。