sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB:WriteResult.getN() vždy vrací 0?

Měl jsem dojem, že to bylo normální chování MongoDB a nemá to nic společného s ovladačem Java.

Jediná věc, kterou mohu najít v dokumentaci, je toto :

insert není ani update ani remove , n Zdá se, že není zadán a 0 je stejně dobrá výchozí hodnota jako kterákoli jiná. Můžete to snadno zkontrolovat v mongo shell:

> db.test.insert({_id: 'test'})
> db.getLastErrorObj()
{ "n" : 0, "connectionId" : 7, "err" : null, "ok" : 1 }

Pokud se nemýlím, ve skutečnosti to není problém:zeptejte se sami sebe, za jakých okolností by vložka selhala (kromě, řekněme, selhání připojení). Jediné, co mě napadá, je porušení omezení jednoznačnosti, které by mělo za následek výjimku. Takže téměř z definice, skutečnost, že obdržíte WriteResult instance vůbec znamená, že operace byla úspěšná a byl vložen dokument.

Pár poznámek:

  • můj předchozí argument závisí na vašem WriteConcern je dostatečně vysoká, aby byly hlášeny chyby. Pokud používáte WriteConcern.NONE , například nikdy nebude vznesena žádná výjimka.
  • Pokud je pro vás počet aktualizovaných dokumentů absolutní nutností, můžete vždy použít save místo insert . Není příliš čistý, ale chová se tak, jak se zdá, že očekáváte.


  1. MongoDB min

  2. Chyba v pojmenování sbírky Mongoose?

  3. Jak se připojit k MongoDB ve Windows?

  4. Jak úplně odstranit pole z dokumentu MongoDB?