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

MongoDB查询:筛选数组仅含指定类型且含特定ID的文档

MongoDB查询方案:筛选数组全为指定type且包含特定id的文档

要实现你需要的查询,必须同时满足两个核心条件:确保数组中没有任何元素的type不是ENT_ENS_TARIF,以及数组中存在包含目标id的元素。之前的查询之所以返回不符合要求的文档,大概率是只检查了存在符合type的元素,没排除存在其他type的情况。

正确查询语句

db.collection.find({
  "ENT_ENS_TARIF_MULTI": {
    // 条件1:数组中存在包含特定id的元素
    $elemMatch: { id: "你的目标ID值" },
    // 条件2:数组中不存在type不等于ENT_ENS_TARIF的元素(即所有元素type都是ENT_ENS_TARIF)
    $not: { $elemMatch: { type: { $ne: "ENT_ENS_TARIF" } } }
  }
})

语句解释

  • $elemMatch: { id: "你的目标ID值" }:精准匹配数组中至少有一个元素的id等于你指定的目标值。
  • $not: { $elemMatch: { type: { $ne: "ENT_ENS_TARIF" } } }:通过反向排除,确保数组里没有任何一个元素的type不是ENT_ENS_TARIF,等价于所有元素的type都必须是ENT_ENS_TARIF。

验证示例

假设你的集合中有以下两个文档:

文档1(不符合要求)

{
  "_id": 1,
  "ENT_ENS_TARIF_MULTI": [
    { type: "ENT_ENS_TARIF", id: "target-id" },
    { type: "ENT_ENS_TARIF2", id: "other-id" }
  ]
}

文档2(符合要求)

{
  "_id": 2,
  "ENT_ENS_TARIF_MULTI": [
    { type: "ENT_ENS_TARIF", id: "target-id" },
    { type: "ENT_ENS_TARIF", id: "another-id" }
  ]
}

当你将查询中的"你的目标ID值"替换为"target-id"时,只会返回文档2,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:27:24