2

我尝试了以下

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 没有显示在那里

4

2 回答 2

3

如果wall收集中的数据不敏感,您可以调用:

db.Wall.ensureIndex({event_time : 1}, {unique: true, dropDups: true})

所有重复项将被永久删除

于 2013-03-10T14:39:56.357 回答
3

如图所示,您不能创建具有重复值的索引。查找重复值的一种简单方法是使用 MongoDB shell 中的聚合查询,例如:

db.Wall.aggregate([
       {$group : { _id: "$event_time" ,  count : { $sum: 1}}},
       {$match : { count : { $gt : 1 } }} ])

event_time这将返回存在于多个Wall文档中的所有值的列表。

解释:

  1. event_time( _id: "$event_time")组
  2. 对于每组event_time(一个唯一的时间),计数加一(count: { $sum: 1}
  3. 然后,只匹配那些count大于 1的组

然后,您可以确定问题的普遍程度。您可以通过填写如下所示的值来进行find所有匹配。当然,它还没有被索引,它不会超快。:)event_timefind

db.Wall.find({ 'event_time' : /* one of the event times */ })

当然,您可以强制删除重复项 ( dropDups),如另一个答案所示。但是,结果可能看起来不确定,因为它只会保留在索引阶段找到的第一个文档,而所有其他文档都将被删除。

于 2013-03-10T15:22:43.823 回答