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

如何使用MongoDB命令对含数组文档实现元素筛选排序并输出指定结果

MongoDB 实现需求的聚合查询

以下是兼容MongoDB 5.2及以上版本的查询语句:

db.collection.aggregate([
  // 过滤不存在member字段的文档
  {
    $match: {
      member: { $exists: true, $ne: null }
    }
  },
  // 将member数组按joinDate降序排序,取第一个元素即为最新加入的成员
  {
    $addFields: {
      latestMember: {
        $first: {
          $sortArray: {
            input: "$member",
            sortBy: { joinDate: -1 }
          }
        }
      }
    }
  },
  // 展开最新成员字段,添加latest前缀,兼容用户名字段大小写差异
  {
    $addFields: {
      latestJoinDate: "$latestMember.joinDate",
      latestUserName: {
        $ifNull: ["$latestMember.username", "$latestMember.userName"]
      }
    }
  },
  // 移除临时字段和原始member数组,保留需要输出的字段
  {
    $project: {
      member: 0,
      latestMember: 0
    }
  },
  // 按latestJoinDate降序排序
  {
    $sort: {
      latestJoinDate: -1
    }
  }
])

低版本MongoDB(5.2以下)兼容写法

如果使用的MongoDB版本不支持$sortArray运算符,可以使用以下写法实现相同效果:

db.collection.aggregate([
  {
    $match: {
      member: { $exists: true, $ne: null }
    }
  },
  { $unwind: "$member" },
  // 按文档_id分组,记录最大joinDate和所有成员信息
  {
    $group: {
      _id: "$_id",
      createdAt: { $first: "$createdAt" },
      roomName: { $first: "$roomName" },
      maxJoinDate: { $max: "$member.joinDate" },
      members: {
        $push: {
          joinDate: "$member.joinDate",
          userName: { $ifNull: ["$member.username", "$member.userName"] }
        }
      }
    }
  },
  // 筛选出joinDate等于最大时间的成员
  {
    $addFields: {
      latestMember: {
        $first: {
          $filter: {
            input: "$members",
            cond: { $eq: ["$$this.joinDate", "$maxJoinDate"] }
          }
        }
      }
    }
  },
  // 拼装最终输出字段
  {
    $project: {
      latestJoinDate: "$latestMember.joinDate",
      latestUserName: "$latestMember.userName",
      createdAt: 1,
      roomName: 1
    }
  },
  { $sort: { latestJoinDate: -1 } }
])

两种写法均自动过滤无member字段的文档,兼容示例中username和userName两种字段名差异,输出结果和排序规则完全匹配要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 01:09:04