2014-02-05 1 views
1

Я хочу проверить, не сработал ли insert (из-за уникального = Истинного индекса в коллекции). Если есть ошибка, сделайте что-нибудь. Ниже приведен пример моего кода.Проверьте, есть ли ошибка при обновлении/вставке | Драйвер Java MongoDB

DBCollection user...; 
BasicDBObject Doc = new BasicDBObject(...); 

String user_exists = user.insert(Doc).getError(); //insert the doc get error if any 
if(user_exists!=null){ //any errors? 
    user.update(new BasicDBObject(...)); // error exists so do smthng 
} 

Вышеуказанный как есть не работает. Я считаю, что значение String user_exists всегда равно нулю. Как я могу сделать вышеуказанную работу?


Я видел подобные SO вопросы и упомянуть WriteConcern, которые могут быть переданы в insert(). Например.

coll.insert(dbObj, WriteConcern.SAFE); 

источники: SO question или Mongo docs

Однако я не знаю, какой из поля я должен пройти (SAFE, ПРИЗНАН, непризнаваемой и т.д ..), чтобы получить ошибку. Возможно, я указал в неправильном направлении.

Я не хочу поднимать исключение, просто проверяя, есть ли ошибка, возвращаемая операцией insert.

+0

Не могли бы вы перефразировать «Однако я не знаю, с каким полем я должен пройти или справиться с остальными». так как это мало смысла – Martin

+0

@Martin Обновлено. Теперь ясно? – Diolor

+0

Да, различные поля WriteConcern описаны в http://api.mongodb.org/java/current/com/mongodb/WriteConcern.html#field_summary – Martin

ответ

1

Если вы используете WriteConcern.ACKNOWLEDGED (который, я думаю, также является SAFE), вам не нужно загрязнять свой код с помощью проверки ошибок.

Для ACKNOWLEDGED водитель автоматически выдаст команду getLastError автоматически и поднимет исключение, если что-то получилось неправильным, например дублирующее нарушение индекса.

Начиная с v2.10 от драйвера Java, по умолчанию запись Концерн является ACKNOWLEDGED

EDIT

Я не хочу, чтобы вызвать исключение только для проверки, если есть ошибка возвращается с помощью операции вставки.

Вы не должны делать это, но в любом случае:

Метод insert действительно возвращает WriteResult. Если это getError() is null, все в порядке, в противном случае оно возвращает что-то вроде E11000 duplicate key error index:.... Для этого вам нужно будет использовать WriteConcern.UNACKNOWLEDGED

+0

Сладкий, но как я могу запустить '.update()'? Я все еще хочу запустить его, если что-то пойдет не так :) – Diolor

+0

Кто-нибудь знает, если это где-то зарегистрировано на страницах MongoDB? Я не мог найти его. –

+0

Найти более подробную информацию о [писать здесь здесь] (http: //docs.mongodb.org/manual/core/write-concern /), а документацию по сохранению можно найти по адресу http://api.mongodb.org/java/current/com/mongodb/DBCollection.html; обратите внимание, что MongoExcption выбрасывается, и он распространяется из RuntimeException –