2012-01-10 6 views
3

シンプルなコードの部分があります。ユニークなインデックス制約のためにエラーが発生します。しかし、両方のオブジェクトはデータベースに追加され、ユニークなインデックスにもかかわらず照会できます。MongoDBユニークインデックスが機能しません

BasicDBObject typeUrlIndex = new BasicDBObject(); 
    typeUrlIndex.put(FIELD_TYPE_URL, 1); 

    BasicDBObject typeUrlIndexOptions = new BasicDBObject(); 
    typeUrlIndexOptions.put("background", true); 
    typeUrlIndexOptions.put("sparse", true); 
    typeUrlIndexOptions.put("unique", true); 
    typeUrlIndexOptions.put("dropDups", true); 

    objects.ensureIndex(typeUrlIndex, typeUrlIndexOptions); 

    // here I can check, that index is really created, and it is true. 
    List<DBObject> indexes = objects.getIndexInfo(); 

    BasicDBObject dbo1 = new BasicDBObject(FIELD_TYPE_URL, "aaa"); 
    objects.save(dbo1); 

    BasicDBObject dbo2 = new BasicDBObject(FIELD_TYPE_URL, "aaa"); 
    objects.save(dbo2); 

両方のオブジェクトが保存され、異なる_idを取得します。

Upd。 私は何が間違っているかを見つけました。両方のオブジェクトはデータベースに保存した後に独自のIDを取得しますが、実際には2番目のオブジェクトは保存されません(指定されたidであっても照会できません)。

araqnidのおかげで、正しい答えが得られました。残念ながら、私は投票するのに十分な評価がありません。あなたは新しいセッションで見たときに、両方のオブジェクトが現れているインデックス

mongodb unique index documentation

+1

あなたが投票できない場合でも、回答を受け入れ済みとマークすることができます。これにより、質問が回答としてマークされます。 – araqnid

+0

Anton、答えに投票する場所の下にマウスを置いて、そこに表示されているチェックマークをクリックすることで、これを合格とマークすることができます。 – IanWhalen

答えて

7

を作成するときに

+0

はい、あなたは正しいです! –

0

あなたは{ unique: true }オプションを追加する必要がありますか?セーブが安全でない場合、サーバが実際にセカンドを拒否するにもかかわらず、上記のコードで割り当てられたIDで戻ってきている可能性があります。

+0

このオプションを追加しました。コードを見てください:typeUrlIndexOptions.put( "unique"、true); –

関連する問題