如何查询MongoDB中未出现在其他文档altNames数组内的域名记录
MongoDB 查询未被其他文档数组字段引用的记录
实现方案
方案1:单次聚合查询(适合所有数据规模)
直接通过MongoDB聚合管道完成全流程查询,无需额外业务逻辑处理:
// 请将下方的<集合名>替换为你的实际集合名称 db.getCollection("<集合名>").aggregate([ // 收集所有文档的altNames字段内容 { $group: { _id: null, referencedList: { $addToSet: "$altNames" } } }, // 将二维引用数组合并为一维去重数组 { $set: { referencedList: { $setUnion: [ { $reduce: { input: "$referencedList", initialValue: [], in: { $concatArrays: ["$$value", "$$this"] } } }, [] ] } } }, // 关联原集合筛选符合要求的文档 { $lookup: { from: "<集合名>", let: { refs: "$referencedList" }, pipeline: [ { $match: { $expr: { $not: { $in: ["$domain", "$$refs"] } } } } ], as: "matchResult" } }, // 提取结果返回原文档结构 { $unwind: "$matchResult" }, { $replaceWith: "$matchResult" } ])
方案2:分两次查询(适合小数据规模,写法更简洁)
如果你的集合数据量不大,可以在业务代码中拆分两次查询实现:
- 先查询所有
altNames中出现过的域名集合
const referencedDomains = await db.getCollection("<集合名>").distinct("altNames")
- 再查询
domain不在上述集合中的文档
const result = await db.getCollection("<集合名>").find({ domain: { $nin: referencedDomains } }).toArray()
内容的提问来源于stack exchange,提问作者Enthys
相关产品推荐
相关产品推荐

