У меня есть часть простого кода, который должен завершиться неудачей из-за уникального ограничения индекса. Но оба объекта добавляются в базу данных и могут быть запрошены, несмотря на уникальный индекс.Уникальный индекс 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.
Обновление. Я нашел, что случилось. Оба объекта получают свой собственный идентификатор после сохранения в базу данных, но фактически второй объект не сохраняется (он не может быть запрошен даже при заданном id).
Благодаря аракиду, который дал правильный ответ. К сожалению, у меня недостаточно голосов для голосования.
Хмм, даже если вы не можете проголосовать, вы должны иметь возможность отметить ответ как принятый, который будет отмечать вопрос как ответ. – araqnid
Антон, вы должны быть в состоянии отметить это как принятое путем зависания под областью, в которой вы голосуете за ответ, и нажав галочку, которую вы видите там. – IanWhalen