2012-07-08 2 views
5

私は次のリンク保存しようとしている:私はこれらの二つのフィールド上で一意とまばらな複合インデックスをしたいのMongoDB:ユニークとスパース複合インデックスまばらな値で

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

を理由:

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

しかし、私はこれを行うとき、私は次のエラーを取得する:通常の索引では、そうでないのに対し、

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

は私が複合インデックスの場合に推測、ヌルは、カウントされます。

この問題を解決する方法はありますか?今のところ、hostnamewebidを別々に索引しています。

+1

を(http://www.mongodb.org/display/DOCS/インデックス#インデックス - ユニークな%3true)(複合またはそれ以外の場合)同一のキーを持つことはできません。 (hostname、null)を持つ単一のレコードを挿入できるはずですが、同じホスト名を持つ2番目のレコードは重複しています。 – Stennie

答えて

4

mongodbはクエリごとに1つのインデックスしか使用できません(別々のインデックスを持つ2つのフィールドでクエリを作成するためにインデックスを一緒に結合しません)。

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

あなたはおそらくあなたのユースケース役立ちます、フィルターインデックスに対して、このJIRA課題に投票することができます:[一意索引]について https://jira.mongodb.org/browse/SERVER-785

+0

oh。どのインデックスをどのように扱うかはどのように決めるのですか?私はすでに一意性をチェックしてから挿入します。 –

+0

コレクションとクエリに基づいて、いくつかの異なるクエリプランが選択されています。http://www.mongodb.org/display/DOCS/Optimization – ranman

関連する問題