sql >> Database >  >> NoSQL >> MongoDB

mangoest om te bepalen dat update-upsert bezig is met invoegen of bijwerken

De .update() methode in mangoest neemt drie argumenten voor de callback, namelijk err , de numAffected , en een raw antwoord. Gebruik het "ruwe" object om te zien wat er is gebeurd:

Member.update({user_id : 1}, 
    {$set : {name:"name1"}}, 
    {upsert : true }, 
    function (err, numAffected, raw) {
    if (!err) {
        console.log(raw)
    }
});

Je ziet een structuur als deze:

{ ok: true,
  n: 1,
  updatedExisting: false,
  upserted: [ { index: 0, _id: 5456fc7738209001a6b5e1be } ] }

Er is dus altijd de n en 'updatedExistingkeys available, where the second is false on upserts and true otherwise. upsertedwill contain the . bevatten _id` waarden van nieuwe documenten die zijn gemaakt.

Wat betreft n of de "numAffected", dit is in principe altijd 1 waar een document is gekoppeld aan de verouderde schrijf-bezorgreacties.

U kunt het nieuwe WriteResult-antwoord in MongoDB 2.6 en hoger zien met behulp van het formulier Bulkbewerkingen:

var bulk = Member.collection.initializeOrderedBulkOp();
bulk.find({user_id : 1}.upsert().update({$set : {name:"name1"}});
bulk.execute(err,result) {
   console.log( JSON.stringify( result, undefined, 2 ) );
}

Wat je bij een eerste iteratie ongeveer als volgt krijgt:

{
  "ok": 1,
  "writeErrors": [],
  "writeConcernErrors": [],
  "nInserted": 0,
  "nUpserted": 1,
  "nMatched": 0,
  "nModified": 0,
  "nRemoved": 0,
  "upserted": [
    {
      "index": 0,
      "_id": "5456fff138209001a6b5e1c0"
    }
  ]
}

En een tweede met dezelfde parameters als deze:

{
  "ok": 1,
  "writeErrors": [],
  "writeConcernErrors": [],
  "nInserted": 0,
  "nUpserted": 0,
  "nMatched": 1,
  "nModified": 0,
  "nRemoved": 0,
  "upserted": []
}

En het document zou alleen als "aangepast" worden gemarkeerd als er daadwerkelijk iets is gewijzigd.

Dus in ieder geval .update() bewerkingen retourneren niet het gewijzigde document of het originele document. Dat is de .findOneAndUpdate() methode, een mangoest-wikkel rond de basis .findAndModify() die een atomaire operatie uitvoert. De .update() methoden zijn meestal bedoeld voor bulkbewerkingen en retourneren als zodanig geen documentinhoud.



  1. mangoest zoeken en bijwerken verwijdert de andere velden

  2. Mongoose Probeert een niet-gesloten verbinding te openen

  3. Mongoose-schema tijdstempel instellen op genest document

  4. MongoDB:kan sockets niet instellen tijdens opstarten