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

在MongoDB Compass中如何匹配同文档数组内指定元素的相同字段?

在MongoDB Compass中查询passengers数组首尾元素email相同的文档

你之前尝试的{"passengers.0.email": "passengers.1.email"}无法生效,原因是MongoDB会把右侧的"passengers.1.email"当作字面量字符串处理,而不是解析为数组第二个元素的email字段值,自然匹配不到目标文档。

在MongoDB Compass中可以实现这个查询,推荐两种方法:

方法1:使用$expr直接过滤(最简方案)

MongoDB 3.6及以上版本支持$expr操作符,允许在查询条件中引用文档内部的字段进行比较。在Compass的Filter输入框中输入以下查询语句:

{
  "$expr": {
    "$eq": ["$passengers.0.email", "$passengers.1.email"]
  }
}

这个表达式会直接对比当前文档中passengers数组第一个元素和第二个元素的email字段值,返回所有满足相等条件的文档。

方法2:带数组长度校验的聚合查询

如果需要避免因数组元素不足(比如只有1个乘客)导致的无效比较,可以在Compass的Aggregation标签页中构建聚合管道,先过滤出至少包含2个乘客的文档,再进行字段对比:

[
  {
    "$match": {
      "passengers.1": { "$exists": true },
      "$expr": { "$eq": ["$passengers.0.email", "$passengers.1.email"] }
    }
  }
]

其中"passengers.1": { "$exists": true }确保数组至少有2个元素,避免无意义的比较。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:16:15