5

次のリンクを保存しようとしています。

URL = {
  hostname: 'i.imgur.com',
  webid: 'qkELz.jpg'
}

次の理由により、これら 2 つのフィールドに一意で疎な複合インデックスが必要です。

  1. との組み合わせは一意hostnamewebidある必要があります。
  2. webidは常に で照会されhostnameます。
  3. webidグローバルに一意である必要はありません。
  4. URLWebID を持っている必要はありません。

ただし、これを行うと、次のエラーが発生します。

MongoError: E11000 duplicate key error index: db.urls.$hostname_1_webid_1  dup key: { : "imgur.com", : null }

複合インデックスの場合、null はカウントされますが、通常のインデックスではカウントされません。

この問題から抜け出す方法はありますか?今のところ、インデックスhostnamewebid個別に作成するだけです。

4

1 に答える 1

5

mongodbはクエリごとに1つのインデックスしか使用できないことに注意してください(インデックスを結合して、別々のインデックスを持つ2つのフィールドでクエリを高速化することはありません)。

とはいえ、一意性を確認したい場合は、挿入する前にアプリからクエリを実行できます(クエリと挿入の間にギャップがあるため、問題は部分的にしか解決されません)。

フィルター処理されたインデックスについて、このJIRAの問題に投票することをお勧めします。これは、おそらくユースケースに役立ちます: https ://jira.mongodb.org/browse/SERVER-785

于 2012-07-08T21:21:15.827 に答える