web-dev-qa-db-ja.com

mongodb 3.4.2 InvalidIndexSpecificationOptionエラー:フィールド 'unique'は_idインデックス指定には無効です

コマンド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属性を追加しないことはオプションではありません。

乾杯!

エド

10
icedawn

その一意性はここでは問題ではありません。それは、すでにインデックスを持っている(自動的に作成される)_idであり、あなたはできない最初のインデックスとまったく同じフィールド(_id:1)を持つ2番目のインデックスを作成します。

_id以外のフィールドでテストすると、そのフィールドにインデックスがまだ存在しない限り、一意のバックグラウンドが可能であることがわかります。

7
JJussi

mongodb3.4では、uniqueとbackgroundは_idフィールドでサポートされていませんが、他のフィールドも可能です。

1
左晓良