mongo集合中的正则表达式聚合查询

时间:2017-12-22 08:45:36

标签: mongodb

我在mongodb工作。我有一个集合,在集合中,有一个EmailAddress字段。在EmailAddress中有许多类型的无效&有效的EmailAddress数据包含。

我已经编写了一个查询来查找重复记录,我也能够找到有效的EmailAddress但无法合并这两个查询。

db.EZShredCustomerData.aggregate(
   {"$match": {"AccountObjectId" : "597ee5ed1f2632885bb650"} },
   {"$group" : 
        {
            "_id": "$EmailAddress",
            "AccountObjectID" : { $first: '$AccountObjectId' }, 
            "EmailAddress" : { $first: '$EmailAddress' },
            "count": { "$sum": 1 } 

   } },
{"$match": {"count" : { $gte: 1 }} })

通过此查询,我得到重复的记录,如

rdod@drivedag.com   2
n/a                24
entbill@entaac.org 12
none               16
;                   8
                   460

我还写了验证电子邮件是否有效的人

db.EZShredCustomerData.find({ 
  "AccountObjectId": "597ee5ed1f2632885bb650", 
  EmailAddress: { $regex: /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/}
  })

问题是,由于缺乏mongo的经验,无法合并两个查询并获得预期的数据

AccountObjectID          EmailAddress
597ee5ed1f2632885bb650  rdod@drivedag.com   
597ee5ed1f2632885bb650  entbill@entaac.org 

1 个答案:

答案 0 :(得分:0)

我自己完成了 以下是代码。

db.EZShredCustomerData.aggregate(
   {"$match": {"AccountObjectId" : "597ee5ed1f2632885bb650"} },
   {"$group" : 
        {
            "_id": "$EmailAddress",
            "AccountObjectID" : { $first: '$AccountObjectId' }, 
            "EmailAddress" : { $first: '$EmailAddress' },
            "count": { "$sum": 1 } 

   } },
{"$match": {"count" : { $eq: 1 }} },
{"$match": {"EmailAddress" : { $regex: /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/ }} })
相关问题