2014-03-31 78 views
1

我遇到了我的数据库问题,因为我的文档代表我的用户使用具有不同情况的字段电子邮件(由于能够创建ghost用户,正在等待他们注册)。当用户注册时,我使用电子邮件的降低版本并覆盖以前的条目。问题是'鬼'电子邮件没有被降低。mongodb - 查找具有相同字段但不同案例的每个文档

如果创建[email protected] ghost,[email protected]注册,他将被称为'[email protected]',所以[email protected]会污染我的数据库。

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

谢谢!

回答

0

您可以使用投影和toLower函数来实现您正在查找的内容。假设你的属性名称是“电子邮件”您的收藏文件中,这里是如何做到这一点的例子 -

+0

嗨!谢谢你的回答。问题是我不知道哪个邮件是重复的。我不熟悉$ project,我会阅读它。你认为可以改变$匹配部分以适合我的需求吗? – Dimitrium

+0

在匹配它之前,您必须将属性转换为lowerCase,以便您可以获取所有文档。如果您不知道哪个属性可能有重复,则可以使用$ OR来包含所有属性。 – hellboy

3

试试这个:

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的用户名。

相关问题