Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb-查找每个字段相同但大小写不同的文档_Mongodb_Duplicates_Case Sensitive - Fatal编程技术网

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

mongodb-查找每个字段相同但大小写不同的文档,mongodb,duplicates,case-sensitive,Mongodb,Duplicates,Case Sensitive,我的数据库有问题,因为我的文档代表了我的用户,带有不同情况的字段电子邮件(由于能够创建ghost user,等待他们注册)。当用户注册时,我使用他的电子邮件的降低版本并覆盖以前的条目。问题是“幽灵”电子邮件没有被降低 如果Foo@bar.com鬼魂被创造,Foo@bar.com登记,他将被称为foo@bar.com”“那么Foo@bar.com只会污染我的数据库 我正在寻找一种方法,以便找到重复的条目,删除不相关的条目(用手),然后再对案例进行修复。想法 谢谢大家! 您可以使用投影和toLowe

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

如果Foo@bar.com鬼魂被创造,Foo@bar.com登记,他将被称为foo@bar.com”“那么Foo@bar.com只会污染我的数据库

我正在寻找一种方法,以便找到重复的条目,删除不相关的条目(用手),然后再对案例进行修复。想法


谢谢大家!

您可以使用投影和toLower函数来实现所需功能。假设您的集合文档中的属性名称为“email”,下面是一个如何实现此目的的示例-

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

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

嗨!谢谢你的回答。问题是我不知道哪些邮件是重复的。我对$project不满意,我会读到它的。您认为有可能更改$match部分以满足我的需要吗?在匹配它之前,您必须将属性转换为小写,以便获得所有文档。如果不知道哪个属性可能有重复项,可以使用$或包含所有属性。工作正常,但某些应用程序(在我的例子中是Robo3T)需要将聚合放在数组表示法
[]
中。这将使查询如下:
db.users.aggregate([…])
。希望这有帮助,这让我困惑。