示されているように、重複する値を持つインデックスを作成することはできません。重複する値を見つける簡単な方法の 1 つは、次のような MongoDB シェルから集計クエリを使用することです。
db.Wall.aggregate([
{$group : { _id: "$event_time" , count : { $sum: 1}}},
{$match : { count : { $gt : 1 } }} ])
event_time
これにより、複数のWall
ドキュメントに存在するすべての値のリストが返されます。
説明:
event_time
( _id: "$event_time"
)のグループ
- (一意の時間) のグループごと
event_time
に、カウントに 1 を追加します ( count: { $sum: 1}
)
count
次に、が 1 より大きいグループのみに一致します。
次に、問題がどの程度広がっているかを判断できます。以下に示すように、a に値をfind
入力することで、すべてのマッチングを行うことができます。もちろん、まだインデックスが作成されていないため、超高速ではありません。:)event_time
find
db.Wall.find({ 'event_time' : /* one of the event times */ })
dropDups
もちろん、別の回答に示されているように、重複 ( ) を強制的に削除することもできます。ただし、インデックス作成フェーズで最初に見つかったドキュメントのみが保持され、他のドキュメントはすべて削除されるため、結果は非決定論的に見える場合があります。