2

MongoDB のフィールド グループに一意のインデックスを追加しようとしています。これらのフィールドのすべてがすべてのドキュメントで使用できるわけではありません。すべてのフィールドを持つものだけをインデックスに登録したいと思います。

だから、私はこれを実行しようとしています:

db.mycollection.ensureIndex({date:1, type:1, reference:1}, {sparse: true, unique: true})

しかし、E11000 duplicate key error index「タイプ」フィールドが欠落しているフィールドでエラーが発生します(それらの多くがあり、重複していますが、無視したいだけです)。

MongoDB で可能ですか、それとも回避策がありますか?

4

2 に答える 2

0

挿入を行う代わりに upsert 操作を使用して、一意性を保証できます。これにより、ドキュメントが既に存在する場合は、ドキュメントが存在しない場合に更新または挿入されます。

test:Mongo > db.test4.ensureIndex({ a : 1, b : 1, c : 1}, {sparse : 1})

test:Mongo > db.test4.update({a : 1, b : 1}, {$set : { d : 1}}, true, false)
test:Mongo > db.test4.find()
{ "_id" : ObjectId("51ae978960d5a3436edbaf7d"), "a" : 1, "b" : 1, "d" : 1 }
test:Mongo > db.test4.update({a : 1, b : 1, c : 1}, {$set : { d : 1}}, true, false)
test:Mongo > db.test4.find()
{ "_id" : ObjectId("51ae978960d5a3436edbaf7d"), "a" : 1, "b" : 1, "d" : 1 }
{ "_id" : ObjectId("51ae97b960d5a3436edbaf7e"), "a" : 1, "b" : 1, "c" : 1, "d" : 1 }
于 2013-06-05T01:46:13.547 に答える