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

如何用MongoDB查询orders数组最小rate等于指定值的完整文档?

解决方案:返回orders数组最小rate等于2的完整文档

方法一:高效计算数组最小值(推荐)

不需要拆分数组,直接利用MongoDB的数组聚合操作计算最小值,全程保留原始文档结构:

db.bookstore.aggregate([
  {
    $addFields: {
      minRate: { $min: "$orders.rate" } // 计算当前文档orders数组中rate的最小值
    }
  },
  {
    $match: {
      minRate: 2 // 筛选出最小值等于2的文档
    }
  },
  {
    $project: {
      minRate: 0 // 可选:移除新增的辅助字段,不影响原始文档的其他字段
    }
  }
])

这个方法的优势是避免了$unwind拆分数组的性能开销,同时不需要手动指定所有要保留的字段——只需要排除新增的minRate字段即可,完美适配你“字段太多不想用投影”的需求。

方法二:基于原查询逻辑修改

如果一定要沿用你最初的$unwind+$group思路,可以在分组时保存完整原始文档,最后替换根文档返回:

db.bookstore.aggregate([
  { $unwind: "$orders" },
  {
    $group: {
      _id: "$_id",
      minRateDoc: { $min: "$orders.rate" },
      originalDoc: { $first: "$$ROOT" } // 存储整个原始文档
    }
  },
  { $match: { minRateDoc: 2 } },
  { $replaceRoot: { newRoot: "$originalDoc" } } // 将原始文档作为返回结果的根
])

这里用$$ROOT引用分组前的完整文档,通过$first把它保存到originalDoc字段,筛选完成后用$replaceRoot把这个字段的内容替换成返回的主文档,就能得到完整的原始数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:25:19