mongodb 如何为有重复项的mongo集合添加唯一索引?

qco9c6ql  于 2023-06-29  发布在  Go
关注(0)|答案(1)|浏览(163)

我对mongo有点陌生,我想知道处理以下情况的最佳方法。
我有一个 students 集合,它有一个名为 email 的字段,该集合已经包含一些具有此属性集的记录,并且我们发现有一些记录的电子邮件重复(多个学生具有相同的电子邮件)。因此,从现在开始,我们希望将电子邮件属性转换为唯一索引,所以我想知道它的过程是什么。
我应该首先删除现有的重复项,还是现在就添加唯一索引就足够了,这样就可以确保从现在开始,集合(db)不允许他们使用现有的电子邮件创建记录?
我的意思是,我们对现有的/以前的记录没有问题,但我们希望防止将来的记录发生这种情况。

yzckvree

yzckvree1#

要添加唯一索引,可以用途:

db.collection.createIndex( email, { unique: true } )

唯一索引确保索引字段不存储重复值;即强制索引字段的唯一性。默认情况下,MongoDB在创建集合时会在_id字段上创建一个唯一的索引。
https://www.mongodb.com/docs/manual/core/index-unique/
但是,在此之前必须删除具有重复电子邮件值的文档

db.dups.aggregate([{$group:{_id:"$email", dups:{$push:"$_id"}, count: {$sum: 1}}},
{$match:{count: {$gt: 1}}}
]).forEach(function(doc){
  doc.dups.shift();
  db.dups.remove({_id : {$in: doc.dups}});
});

查看此答案以获取更多信息https://stackoverflow.com/a/35711737/1278463

相关问题