我的数据库出现问题,因为我的文档代表我的用户使用不同情况的字段电子邮件(由于能够创建ghost用户,等待他们注册)。当用户注册时,我使用降级的电子邮件版本并覆盖之前的条目。问题是'幽灵'电子邮件还没有降低。
如果创建了Foo@bar.com幽灵,Foo @ bar.com注册,他将被称为'foo@bar.com',因此Foo@bar.com将污染我的数据库。
我想找到一种方法来查找重复条目,在我推送关于案例的修复之前删除不相关的条目(手动)。想法?
谢谢!
答案 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/}}])