2

MongoDB のスパース インデックスを理解しようとしています。私がこれを行う場合、私はそれを理解しています:

> db.check.ensureIndex({"id":1},{sparse:true, unique:true})

idフィールドが重複しておらず、欠落していないドキュメントのみを挿入できます。したがって、私は試しました、

> db.check.insert({id:1})
> db.check.insert({id:1})

私が予想したように、それは与えました:

E11000 duplicate key error index: test.check.$id_1  dup key: { : 1.0 }

idただし、存在しないフィールドを持つドキュメントを挿入すると:

> db.check.insert({})

動作します!何がうまくいかないのですか?

4

2 に答える 2

3

スパース ユニーク インデックスとは、ドキュメントがインデックス付きフィールドを持っている必要がないことを意味しますが、そのフィールドがある場合、それはユニークでなければなりません。

フィールドが存在しない場合、任意の数のドキュメントをコレクションに追加できます。空のドキュメントを挿入すると、_id フィールドは (保証されている限り) 一意である自動生成された ObjectID を取得することに注意してください。

于 2013-06-01T23:17:05.497 に答える
1

それはほとんどsparse意味があります。ドキュメントから;

スパース インデックスには、インデックス付きフィールドを持つドキュメントのエントリのみが含まれます。[5]フィールドが欠落している文書は索引付けされません。

つまり、id フィールドが欠落していると、インデックスは一意のチェックのためにそのエントリを考慮しなくなります。

于 2013-06-01T23:15:41.800 に答える