一意のインデックス制約のために失敗する必要がある単純なコードの一部があります。ただし、一意のインデックスにもかかわらず、両方のオブジェクトがデータベースに追加され、クエリを実行できます。
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 が取得されます。
更新。 わかった、どうした。両方のオブジェクトは、データベースに保存した後に独自の ID を取得しますが、実際には 2 番目のオブジェクトは保存されません (指定された ID であってもクエリできません)。
正しい答えを与えてくれたaraqnidのおかげです。残念ながら、投票するのに十分な評価がありません。