按 $group 聚合记录 - 条件 1 或条件 2

Aggregating records by $group - condition 1 or condition 2

我有一个包含大约 5 万条“公司”记录的数据库。

我想通过匹配找到重复项:

  1. namestreet 个字段。

  1. phone 字段

(我认为#1 和#2 都是唯一标识符,因此两者都可用于查找重复项。)

我可以编写 $group 语句来匹配基于 #1:

  _id: {
    name: '$name',
    street: 'street'
  },
  uniqueIds: {
    $addToSet: '$_id'
  },
  count: {
    $sum: 1
  }

我试过这样的事情来匹配一个或另一个:


_id: { 
 $or: [
  {name: '$name', street: '$street'},
  {phone: '$phone}
 ]
}...

但这只是 returns 一个布尔值。

如何在同一聚合中通过过滤上面的 #1 或 #2 进行分组?

一种选择是使用 $facet:

db.company.aggregate([  
{ $facet:{  
by_name_street:[ {$group:{ _id:{n:"$name",str:"$street" }, cnt:{$sum:1} }} ] , 
by_phone:[ {$group:{ _id:"$phone" , cnt:{$sum:1}  }} ]  
} }    
])