mongodb - 查找具有相同字段但不同大小写的每个文档

时间:2014-03-31 17:04:09

标签: mongodb duplicates case-sensitive

我的数据库出现问题,因为我的文档代表我的用户使用不同情况的字段电子邮件(由于能够创建ghost用户,等待他们注册)。当用户注册时,我使用降级的电子邮件版本并覆盖之前的条目。问题是'幽灵'电子邮件还没有降低。

如果创建了Foo@bar.com幽灵,Foo @ bar.com注册,他将被称为'foo@bar.com',因此Foo@bar.com将污染我的数据库。

我想找到一种方法来查找重复条目,在我推送关于案例的修复之前删除不相关的条目(手动)。想法?

谢谢!

2 个答案:

答案 0 :(得分:7)

试试这个:

db.users.aggregate(
    {$match : {"username":{$exists:true}}},
    { $project : {"username":{"$toLower":["$username"]}}},
    { $group : {_id : "$username", total : { $sum : 1 } } },
    { $match : { total : { $gte : 2 } } },
    { $sort : {total : -1} },
    { $limit : 5 }
);

这将找到具有用户名的每个用户,将用户名设置为小写,然后按用户名对其进行分组,并显示计数大于1的用户名。

答案 1 :(得分:0)

您可以使用projection和toLower功能来实现您的目标。假设您的属性名称为" email"在您的收藏文档中,以下是如何实现此目的的示例 -

db.yourcollection.aggregate([{$project:{"email":{"$toLower":["$email"]}}},{$match:{"email":/foo@bar.com/}}])