猫鼬跳过,限制和计数

时间:2013-03-30 10:17:10

标签: node.js mongodb mongoose

我正在开发一个节点项目,我在其中为网格应用过滤器和分页。

我需要找到的项目,查询中找到的总数以及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查询获取两个值(找到的总数和总数)(并且可能直接在查询中限制返回项的结果)?

2 个答案:

答案 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()来初始化变量。