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

mangusta, aby określić, czy aktualizacja-upsert wykonuje wstawianie lub aktualizowanie

.update() metoda w manguście pobiera trzy argumenty do wywołania zwrotnego, czyli err , numAffected i raw odpowiedź. Użyj „surowego” obiektu, aby zobaczyć, co się stało:

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

Zobaczysz taką strukturę:

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

Więc zawsze jest n i 'updatedExistingkeys available, where the second is false on upserts and true otherwise. upsertedwill contain the wartości _id` wszelkich nowo utworzonych dokumentów.

Jak dla n lub „numAffected”, jest to w zasadzie zawsze 1, gdy dokument został dopasowany w odpowiedziach dotyczących starszych zapisów.

Możesz zobaczyć nową odpowiedź WriteResult w MongoDB 2.6 i nowszych, korzystając z formularza operacji zbiorczych:

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 ) );
}

Które w pierwszej iteracji otrzymasz coś takiego:

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

I drugi z takimi samymi parametrami jak ten:

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

A dokument zostanie oznaczony jako „zmodyfikowany” tylko wtedy, gdy coś zostało faktycznie zmienione.

W każdym razie .update() operacje nie zwracają zmodyfikowanego dokumentu lub oryginalnego dokumentu. To jest .findOneAndUpdate() metoda, otoczka mangusty wokół podstawowego .findAndModify() który wykonuje operację atomową. .update() metody są zazwyczaj przeznaczone do operacji zbiorczych i jako takie nie zwracają treści dokumentu.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zwrócić liczbę zaktualizowanych obiektów w mongodb?

  2. Grupuj MongoDB według wartości w polu tablicy

  3. MongoDB Pełne i częściowe wyszukiwanie tekstu

  4. Pierwsze kroki z Pythonem i MongoDB

  5. Jak zainstalować mongodb w Elastic Beanstalk?