You need to enable JavaScript to run this app. MongoDB查询prizes字段含2个嵌入式文档的诺奖得主方法
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB查询prizes字段含2个嵌入式文档的诺奖得主方法

筛选恰好获得两次诺贝尔奖得主的MongoDB实现

要实现这个筛选需求,本质是匹配文档中prizes嵌入式数组的长度恰好为2(数组中每一个元素对应一次诺贝尔奖获奖记录),可参考以下实现方案,同时避开常见的写法误区。

可直接使用的查询语句

通用单条find查询

所有支持$size数组操作符的MongoDB版本都可以直接运行,无额外性能损耗:

db.laureate.find({
  prizes: { $size: 2 }
})

说明:$size操作符会严格匹配数组的实际元素个数,仅会返回数组长度等于2的文档,不会误匹配数组长度大于2的获奖记录,完全满足“恰好两次获奖”的筛选要求。

低版本兼容的聚合实现

如果使用的MongoDB版本对直接匹配数组大小存在限制,可通过聚合管道完成相同逻辑:

db.laureate.aggregate([
  // 计算prizes数组的元素个数,存入临时字段
  {
    $addFields: {
      prize_total: { $size: "$prizes" }
    }
  },
  // 筛选获奖次数恰好为2的文档
  {
    $match: { prize_total: 2 }
  },
  // 移除临时字段,保持返回文档结构与原结构一致
  {
    $project: { prize_total: 0 }
  }
])

常见写法误区

  • 不要使用{prizes: {$all: [{$elemMatch:{}}, {$elemMatch:{}}]}的写法:该逻辑仅会校验数组中是否存在至少2个元素,长度大于2的获奖记录也会被误命中,无法实现“恰好两次”的筛选要求。
  • 不要使用$where写脚本式判断:这类写法无法利用数据库索引,在数据量较大时查询性能会出现明显下降。

运行上述正确的查询语句后,返回的结果会恰好包含玛丽·居里、莱纳斯·鲍林两位符合条件的得主,和预期结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 22:57:03