Wenn ich versuche, einen Teil der von einer Mungo-Abfrage zurückgegebenen Daten zu ändern, hat dies keine Auswirkungen.
Ich habe gestern ungefähr 2 Stunden lang versucht, dies herauszufinden, mit allen Arten von _.clone()
s, unter Verwendung temporärer Speichervariablen usw. Schließlich fand ich eine Lösung, als ich verrückt wurde. Also dachte ich mir, dass jemand in der Zukunft (fyuuuture!) Das Problem mit dem Speichern haben könnte.
Survey.findById(req.params.id, function(err, data){
var len = data.survey_questions.length;
var counter = 0;
_.each(data.survey_questions, function(sq){
Question.findById(sq.question, function(err, q){
sq.question = q; //has no effect
if(++counter == len) {
res.send(data);
}
});
});
});
Antworten:
In solchen Fällen, in denen Sie ein einfaches JS-Objekt anstelle einer vollständigen Modellinstanz möchten, können Sie
lean()
die Abfragekette folgendermaßen aufrufen :Dieser Weg
data
ist bereits ein einfaches JS-Objekt, das Sie nach Bedarf bearbeiten können.quelle
aggregate
liefert seine Ergebnisse immer als einfache Objekte, sodass dies nicht erforderlich istlean()
.Ich denke, die Mongoose-Dokumentation macht dies nicht klar genug, aber die in der Abfrage zurückgegebenen Daten (obwohl Sie sie res.send () können) sind tatsächlich ein Mongoose-Dokumentobjekt und KEIN JSON-Objekt. Aber Sie können dies mit einer Zeile beheben ...
quelle
toObject()
, was dasselbe tut,toJSON()
aber mit einem weniger verwirrenden Namen.TypeError: data.toObject is not a function
Ich habe das gleiche, mittoJSON
result
zu ändern, konnte ich es ändernresult._doc
.JSON.parse(JSON.stringify(data))
stattdessen für Arrays von Objekten