我尝试了以下
db.Wall.ensureIndex({event_time : 1}, {unique: true})
但此输出会继续显示
{
"err" : "E11000 duplicate key error index: scrap.Wall.$event_time_1 dup key: { : new Date(0) }",
"code" : 11000,
"n" : 0,
"connectionId" : 10,
"ok" : 1
}
我尝试了getIndexes,但event_time没有显示在那里
答案 0 :(得分:3)
如果wall
集合中的数据不敏感,您可以调用:
db.Wall.ensureIndex({event_time : 1}, {unique: true, dropDups: true})
但所有重复将永久删除!
答案 1 :(得分:3)
您无法创建具有重复值的索引,如图所示。查找重复值的一种简单方法是使用MongoDB shell中的aggregate查询,例如:
db.Wall.aggregate([
{$group : { _id: "$event_time" , count : { $sum: 1}}},
{$match : { count : { $gt : 1 } }} ])
这将返回多个event_time
文档中包含的所有Wall
值的列表。
说明:
event_time
(_id: "$event_time"
)event_time
(唯一时间),在计数中添加一个(count: { $sum: 1}
)count
大于1 然后,您可以决定问题的普遍程度。您可以通过填写find
中的event_time
值来find
所有匹配项,如下所示。当然,它还不会超级快,尚未编入索引。 :)
db.Wall.find({ 'event_time' : /* one of the event times */ })
当然,你可以强行删除重复项(dropDups
),如另一个答案所示。但是,结果可能看起来不确定,因为它只会保留在索引阶段找到的第一个文档,而其他所有文档都将被删除。