如何在MongoDB中实现同集合内连接等价查询(EAV结构场景)
MongoDB EAV结构多条件交集查询实现方案
你可以通过MongoDB聚合管道实现需求,具体逻辑是先过滤符合单个条件的记录,再按domain_id分组筛选同时命中所有条件的结果,完整语句如下:
db.你的集合名.aggregate([ // 第一步:过滤出所有符合两个条件中任意一个的记录,缩小计算范围 { $match: { $or: [ { key: "A", value: 1 }, { key: "C", value: 3 } ] } }, // 第二步:按domain_id分组,收集每个domain_id命中的不重复key { $group: { _id: "$domain_id", matched_keys: { $addToSet: "$key" } } }, // 第三步:筛选同时命中两个key的domain_id { $match: { matched_keys: { $all: ["A", "C"] } } }, // 第四步:调整输出格式和预期一致 { $project: { _id: 0, domain_id: "$_id" } } ])
优化提示
如果集合数据量较大,可以创建{key: 1, value: 1}的联合索引,大幅提升第一步$match的过滤效率。该方案天然兼容同一个domain_id下同一个key重复存储的场景,$addToSet会自动去重不会影响逻辑判断。
内容的提问来源于stack exchange,提问作者Andrey Rusovich
相关产品推荐
相关产品推荐

