コマンドdb.testCollection.createIndex( { _id: 1 }, {name: "_id_2", unique: true, background: true} )
はmongoバージョン3.4.2では失敗しますが、3.2.11では失敗しません。 mongoのドキュメントには、バージョン3.4がunique
属性とbackground
属性の両方をサポートしていることが示されています。
Mongo3.4.2が失敗します.。
> use testDB
switched to db testDB
> db.testCollection.createIndex( { _id: 1 }, {name: "_id_2", unique: true, background: true} )
{
"ok" : 0,
"errmsg" : "The field 'unique' is not valid for an _id index specification. Specification: { ns: \"testDB.testCollection\", v: 1, key: { _id: 1.0 }, name: \"_id_2\", unique: true, background: true }",
"code" : 197,
"codeName" : "InvalidIndexSpecificationOption"
}
>
Mongo3.2.11は動作します.。
> use testDB
switched to db testDB
> db.testCollection.createIndex( { _id: 1 }, {name: "_id_2", unique: true, background: true} )
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 1,
"note" : "all indexes already exist",
"ok" : 1
}
>
回避策を知っている人はいますか?
Mongoose Node.jsラッパーを使用してMongoインデックスを作成しているため、unique
属性とbackground
属性を追加しないことはオプションではありません。
乾杯!
エド
その一意性はここでは問題ではありません。それは、すでにインデックスを持っている(自動的に作成される)_idであり、あなたはできない最初のインデックスとまったく同じフィールド(_id:1)を持つ2番目のインデックスを作成します。
_id以外のフィールドでテストすると、そのフィールドにインデックスがまだ存在しない限り、一意のバックグラウンドが可能であることがわかります。
mongodb3.4では、uniqueとbackgroundは_idフィールドでサポートされていませんが、他のフィールドも可能です。