猫鼬跳过、限制和计数

Posted

技术标签:

【中文标题】猫鼬跳过、限制和计数【英文标题】:Mongoose skip, limit and count 【发布时间】:2013-03-20 23:43:00 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

你不能。您需要使用 limit 和 count() 执行 find(),但考虑到您正在复制查询数量,这会降低系统速度。您可以将总长度存储到内存中,并在执行 insert() 时自动递增它,而不是执行 count()。当服务器启动时,执行 count() 来初始化变量。

【讨论】:

【参考方案2】:

我还没有找到更好的答案,但我发现了这个值得一提的选项。明显的缺点是数据库返回的数据集更大。

projects.find(query).select(q).exec (err, items) ->
    itemsTotals = items.length
    items = items.slice(skip, 10 + skip)
    itemsFound = items.length

我找到了这个here

【讨论】:

以上是关于猫鼬跳过、限制和计数的主要内容,如果未能解决你的问题,请参考以下文章

Mongo:将返回的记录限制为切片的增量计数

跳过和限制猫鼬模型子文档/数组

使用猫鼬的收集计数[重复]

MongoDB(猫鼬)聚合计数集合中特定 ObjectID 的实例

获取计数并与猫鼬中的响应合并

Mongo 聚合游标和计数