You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose查询时如何按likes、comments数组长度对Post文档排序

解决方案

你遇到的问题本质是普通find操作的执行顺序为「匹配查询条件 → 排序 → 字段投影」,投影阶段计算得到的数组长度字段无法参与前置的排序逻辑,因此需要使用MongoDB聚合管道实现需求,聚合管道会严格按照你定义的阶段顺序执行:

PostModel.aggregate([
  // 阶段1:新增两个计算字段,分别统计点赞数、评论数
  {
    $addFields: {
      likeCount: { $size: { $ifNull: ['$likes', []] } },
      commentCount: { $size: { $ifNull: ['$comments', []] } }
    }
  },
  // 阶段2:按需求规则排序
  {
    $sort: {
      likeCount: -1,
      commentCount: -1
    }
  },
  // 可选阶段:如果不需要返回统计字段,可通过投影移除
  {
    $project: {
      likeCount: 0,
      commentCount: 0
    }
  }
])

上述代码中$ifNull是为了兼容部分文档可能不存在likes/comments字段的场景,避免$size操作符报错。如果你的模型定义保证这两个字段必然存在,可直接简化为{ $size: '$likes' }。

内容的提问来源于stack exchange,提问作者blueBird

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:45:03