MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB:WriteResult.getN() zawsze zwraca 0?

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żywasz WriteConcern.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 zamiast insert . Niezbyt czysty, ale zachowuje się tak, jak tego oczekujesz.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Meteor Simple Schema - Gdy opcja modyfikatora ma wartość true, obiekt walidacji musi mieć co najmniej jeden operator

  2. MongoDB Tutorial:Łączenie się z MongoDB w Scala

  3. C# Mongodb. Pole sum dla wszystkich dokumentów

  4. Aktualizacja MongooseWiele z różnymi wartościami według unikalnego identyfikatora, takiego jak e-mail bez pętli

  5. Sprawdź, czy upsert MongoDB wykonał insert lub aktualizację