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

如何在MongoDB中查询满足条件且指定字段唯一的完整文档?

MongoDB 按唯一userID返回完整文档的查询方案

要实现筛选closed: false且public: true的文档,同时保证返回结果中userID唯一,并且拿到完整文档结构,用聚合框架就能搞定。核心是在$group阶段保留完整文档,再通过$replaceRoot恢复结构,具体方案如下:

完整聚合查询代码

db.collection.aggregate([
  // 过滤符合条件的文档
  {
    $match: {
      closed: false,
      public: true
    }
  },
  // 按userID分组,保留每组内的第一个完整文档(也可换$last取最后一个)
  {
    $group: {
      _id: "$userID",
      doc: { $first: "$$ROOT" }
    }
  },
  // 将分组内的完整文档恢复为根节点结构
  {
    $replaceRoot: { newRoot: "$doc" }
  },
  // 限制返回最多20条结果
  {
    $limit: 20
  }
])

各阶段作用说明

  • $match:先过滤掉不符合条件的文档,减少后续处理的数据量。
  • $group:以userID为分组键,用$first: "$$ROOT"保留每组中第一个出现的完整文档($$ROOT代表当前整条文档)。如果想取每组里最新的文档,可以在$match之后加$sort阶段(比如按_id倒序),再用$first就能拿到最新条目。
  • $replaceRoot:把$group阶段存在doc字段里的完整文档,替换成结果的根节点,让返回数据和原始文档结构一致。
  • $limit:最后限制返回最多20条符合要求的文档。

针对你的示例数据

执行上述查询后,会返回userID1和userID2各一条完整文档,要么是uid1+uid2,要么是uid3+uid2(取决于文档存储顺序,或是否添加了$sort),完全符合你的期望结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:52:41