db.mycollection.aggregate([
// Group by the field combination you plan to add a unique index on
{ $group: {
_id: { a: "$a", b: "$b"},
count: { $sum: 1 }
}},
// Find any groups which are not unique (more than 1 matching document)
{ $match: {
count: { "$gt": 1}
}}
])
在尝试创建唯一索引之前,您可以使用聚合查询来检查重复项。
例如,如果要在字段
a
和上创建唯一索引b
:插入一些测试数据:
查找具有重复值的文档:
上面示例数据的聚合输出表明有两个文档缺少预期的字段
a
和b
,以及两个具有重复值a
和的文档b
:在此示例中,我有意包含了一些缺少预期字段的文档,因为
null
如果您创建唯一索引,这些文档将被索引为值。默认情况下,即使给定文档缺少唯一索引中的一个或多个字段,唯一要求仍然适用,因为集合中的所有文档都已添加到索引中。如果您只希望在两个字段都存在(或使用其他一些条件)时字段组合是唯一的,您可以创建一个具有 Unique Constraint 的部分索引。