【问题标题】:Aggregating records by $group - condition 1 or condition 2按 $group 聚合记录 - 条件 1 或条件 2
【发布时间】:2021-02-05 07:10:46
【问题描述】:

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

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

  1. namestreet 字段。

  1. phone字段

(我认为 #1 和 #2 都是唯一标识符,因此可以使用其中任何一个来查找重复项。)

我可以根据 #1 编写 $group 语句来匹配:

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

我尝试了这样的方法来匹配其中一个:


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

但这只是返回一个布尔值。

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

【问题讨论】:

    标签: mongodb aggregation


    【解决方案1】:

    一种选择是使用 $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}  }} ]  
    } }    
    ])
    

    【讨论】:

      猜你喜欢
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多