MongoDB聚合查询全集合文档 提取跨文档重复IP及对应文档ID
MongoDB 全量聚合查询实现
你可以直接使用如下聚合管道实现需求,默认假设你的集合名为your_collection,IP数组字段名为ips,文档主键为_id:
db.your_collection.aggregate([ // 拆分IP数组,生成单IP+对应文档ID的独立记录 { $unwind: "$ips" }, // 按IP分组,收集所有关联的文档ID(自动去重,避免同一文档重复IP导致ID重复) { $group: { _id: "$ips", doc_ids: { $addToSet: { $toString: "$_id" } } } }, // 过滤仅保留至少在2个不同文档出现的IP { $match: { $expr: { $gte: [ { $size: "$doc_ids" }, 2 ] } } }, // 可选:直接生成你要求的目标JSON结构,无需后续代码处理 { $group: { _id: null, ip_map: { $push: { k: "$_id", v: "$doc_ids" } } } }, { $replaceRoot: { newRoot: { $arrayToObject: "$ip_map" } } } ])
注意事项
- 如果你文档的
_id本身就是字符串类型,删除$toString转换逻辑即可 - 若允许同一文档内重复IP对应多次相同ID,可将
$addToSet替换为$push - 不需要直接返回目标结构的话,删除最后两个聚合阶段即可,会返回
{_id: "IP地址", doc_ids: [文档ID数组]}格式的列表,你可以在业务代码中自行转换为目标结构
内容的提问来源于stack exchange,提问作者Jesper MENIX Lund
相关产品推荐
相关产品推荐

