MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB:WriteResult.getN() винаги връща 0?

Останах с впечатлението, че това е нормалното поведение на MongoDB и няма нищо общо с Java драйвера.

Единственото нещо, което мога да намеря в документацията, е това :

insert не е нито update нито remove , n не изглежда да е посочено и 0 е толкова добра стойност по подразбиране, колкото всяка друга. Можете да го проверите достатъчно лесно в mongo shell:

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

Освен ако не греша, това всъщност не е проблем:запитайте се при какви обстоятелства вмъкването ще се провали (освен, да речем, повреда на връзката). Единственото, за което се сещам, е нарушение на ограничението за уникалност, което би довело до изключение. Така че почти по дефиниция, фактът, че получавате WriteResult instance изобщо означава, че операцията е била успешна и документът е бил вмъкнат.

Няколко бележки:

  • предишният ми аргумент зависи от вашето WriteConcern е достатъчно висока, за да се докладват грешки. Ако използвате WriteConcern.NONE , например, никога няма да бъде повдигнато изключение.
  • ако броят на актуализираните документи е абсолютно задължителен за вас, винаги можете да използвате save вместо insert . Не е много чист, но се държи така, както изглежда очаквате.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Изчислете времето на престой между всяка промяна на стойността на състоянието

  2. MongoDB - Актуализиране или вмъкване на обект в масив

  3. Mongo db агрегиране на множество условия

  4. Транзакция 1 е извършена в MongoDB

  5. Група Mongodb по поле dbref