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
相关产品推荐
相关产品推荐

