Il .update()
metodo in mongoose accetta tre argomenti per la richiamata, essendo err
, il numAffected
e un raw
risposta. Usa l'oggetto "grezzo" per vedere cosa è successo:
Member.update({user_id : 1},
{$set : {name:"name1"}},
{upsert : true },
function (err, numAffected, raw) {
if (!err) {
console.log(raw)
}
});
Vedrai una struttura come questa:
{ ok: true,
n: 1,
updatedExisting: false,
upserted: [ { index: 0, _id: 5456fc7738209001a6b5e1be } ] }
Quindi c'è sempre il n
e 'updatedExistingkeys available, where the second is false on upserts and true otherwise.
upsertedwill contain the
_id` valori di tutti i nuovi documenti creati.
Come per n
o "numAffected", questo è fondamentalmente sempre 1 in cui un documento è stato confrontato con le risposte ai problemi di scrittura legacy.
Puoi vedere la nuova risposta WriteResult in MongoDB 2.6 e versioni successive utilizzando il modulo Operazioni in blocco:
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 ) );
}
Che su una prima iterazione ottieni qualcosa del genere:
{
"ok": 1,
"writeErrors": [],
"writeConcernErrors": [],
"nInserted": 0,
"nUpserted": 1,
"nMatched": 0,
"nModified": 0,
"nRemoved": 0,
"upserted": [
{
"index": 0,
"_id": "5456fff138209001a6b5e1c0"
}
]
}
E un secondo con gli stessi parametri come questo:
{
"ok": 1,
"writeErrors": [],
"writeConcernErrors": [],
"nInserted": 0,
"nUpserted": 0,
"nMatched": 1,
"nModified": 0,
"nRemoved": 0,
"upserted": []
}
E il documento verrebbe contrassegnato come "modificato" solo quando qualcosa è stato effettivamente modificato.
Quindi, in ogni caso, .update()
operazioni non restituiscono il documento modificato o il documento originale. Questo è il .findOneAndUpdate()
metodo, un wrapper mangusta attorno al .findAndModify()
di base che esegue un'operazione atomica. Il .update()
i metodi sono in genere pensati per operazioni in blocco e come tali non restituiscono il contenuto del documento.