Warum verwendet die Methode $#$ findOneAndUpdate
findAndModify
unter der Haube findAndModify anstelle von findOneAndUpdate ?
Ich muss Projektionseinstellungen übergeben, aber es funktioniert nicht, weil findAndModifiy
solche Parameter nicht akzeptiert und daher das gesamte Dokument zurückgibt.
Z.B:
Product
.findOneAndUpdate({
_id: productId,
}, {
$push: {colors: data},
}, {
projection: {
name: 1, 'colors.$': 1,
},
returnNewDocument: true,
})
Weil findOneAndUpdate()
Mongoose lange vor der Existenz von findOneAndUpdate()
im zugrunde liegenden Mongodb-Treiber liegt und findOneAndUpdate()
des Treibers sowieso nur eine dünne Hülle um findAndModify
ist. Außerdem hat das findOneAndUpdate()
des Treibers mehrere skurrile Semantiken, insbesondere im Zusammenhang mit der Option new
und dem Unterschied zwischen new
und returnNewDocument
, die für Mungo lästig sind.
Projektionen, die nicht funktionieren, sind ein kleines Problem. Versuchen Sie, 'fields' anstelle von 'projection' zu verwenden, da dies der Name ist, den die zugrunde liegende findAndModify
-Funktion verwendet
Danke fürs klarstellen. Ja, ich habe bemerkt, dass es einige seltsame Unterschiede bei der Benennung gab, zB fields
vs. projection
und new
vs. returnNewDocument
.
Ja, es gibt ein wenig Verwirrung, weil jede API ihre eigene spezielle Schneeflocke sein möchte :) Jetzt, da der Mongodb-Treiber eine findOneAndUpdate()
-Funktion hinzugefügt hat, die ihre eigenen Macken hat, bin ich mir noch nicht ganz sicher, wie ich mit Mongooses fineOneAndUpdate( )
Hilfreichster Kommentar
Ja, es gibt ein wenig Verwirrung, weil jede API ihre eigene spezielle Schneeflocke sein möchte :) Jetzt, da der Mongodb-Treiber eine
findOneAndUpdate()
-Funktion hinzugefügt hat, die ihre eigenen Macken hat, bin ich mir noch nicht ganz sicher, wie ich mit Mongooses fineOneAndUpdate( )