Miałem wrażenie, że to normalne zachowanie MongoDB i nie ma nic wspólnego ze sterownikiem Java.
Jedyne, co mogę znaleźć w dokumentacji, to to :
insert
nie będąc update
ani remove
, n
nie wydaje się być określony, a 0 jest tak dobrą wartością domyślną, jak każda. Możesz to łatwo sprawdzić w powłoce mongo:
> db.test.insert({_id: 'test'})
> db.getLastErrorObj()
{ "n" : 0, "connectionId" : 7, "err" : null, "ok" : 1 }
O ile się nie mylę, to naprawdę nie jest problem:zadaj sobie pytanie, w jakich okolicznościach wstawka może się nie powieść (poza, powiedzmy, awarią połączenia). Jedyne, o którym mogę pomyśleć, to naruszenie ograniczenia jedności, które skutkowałoby wyjątkiem. Tak więc prawie z definicji, fakt, że otrzymujesz WriteResult
w ogóle oznacza, że operacja się powiodła i dokument został wstawiony.
Kilka uwag:
- mój poprzedni argument zależy od Twojego
WriteConcern
jest na tyle wysoki, że zgłaszane są błędy. Jeśli używaszWriteConcern.NONE
, na przykład, nie zostanie zgłoszony żaden wyjątek. - jeśli liczba zaktualizowanych dokumentów jest dla Ciebie absolutną koniecznością, zawsze możesz użyć
save
zamiastinsert
. Niezbyt czysty, ale zachowuje się tak, jak tego oczekujesz.