Ich arbeite mit Nodejs Express Routen und Mongoose, um Daten zu persistieren. Ich habe den Kern CRUD-Operationen ohne Probleme durchgeführt. Jedoch, wenn ich versuche, einige Operationen auf einem der Felder des Modells durchzuführen und dann versuchen, das Modell mit model.save zu speichern, sagt es über .save() Methode: "undefined ist keine Funktion"Nodejs Mongoose Saving Modell undefined ist keine Funktion
Also, Hier ist der Code. Die Schnipsel-Nummer (1) funktioniert gut:
router.put('/:myId', function (req, res, next) {
var ourUpdateData = req.body;
Model.findOne({myId: req.params.myId.toString()}, function (err, foundModel) {
if (err) throw err;
if (ourUpdateData.fieldA) foundModel.fieldA = ourUpdateData.fieldA;
if (ourUpdateData.fieldB) foundModel.fieldB = ourUpdateData.fieldB;
if (ourUpdateData.fieldC) foundModel.fieldC = ourUpdateData.fieldC;
if (ourUpdateData.fieldD) foundModel.fieldD = ourUpdateData.fieldD;
if (typeof ourUpdateData.fieldArray === "object") ourUpdateData.fieldArray = ourUpdateData.fieldArray;
foundModel.save(function (err, updatedModel) {
if (err) throw err;
res.send(updatedmodel);
});
});
});
So hat das Modell 6 Felder: fieldA, .. B, .. C, .. D, myId, um als Index und ein Feld zu identifizieren Array von einigen Werten fieldArray. Das obige Beispiel speichert das Modell, funktioniert gut. Wenn ich jetzt jedoch versuche, etwas mit Array-Feld fieldArray zu tun und dann das Model zu speichern, wirft es mich "undefined ist keine Funktion", wenn ich model.save() verwende. Also das Snippet (2) ist der Code, der diesen Fehler erzeugt:
router.get('/:myId/:addThisToFieldArray', function(req, res, next) {
var myId = req.params.myId;
var addThisToFieldArray = req.params.addThisToFieldArray;
Model.find({myId: myId}, function (err, model) {
if (err) throw err;
var fieldArray = model.fieldArray;
fieldArray.push("New thing to FieldArray");
var newFieldArray = fieldArray;
if (typeof newFieldArray === "object") model.fieldArray = newFieldArray;
model.save(function (err, updatedModel){
if (err) throw err;
res.send(updatedModel);
});
});
});
Also das Ding oben wirft "undefiniert ist keine Funktion" über die Verwendung model.save (..)
ich auch versucht, zweite Variante des Snippets (2), nennen wir es Snippet (3), einschließlich der .exec() Auch nicht funktioniert, wirft das gleiche "undefined ist keine Funktion" auf model.save (..) Also die Schnipsel (3) ist dies:
router.get('/:myId/:addThisToFieldArray', function(req, res, next) {
var myId = req.params.myId;
var addThisToFieldArray = req.params.addThisToFieldArray;
Model.find({myId: myId}).exec(function (err, model) {
if (err) throw err;
var fieldArray = model.fieldArray;
fieldArray.push("New thing to FieldArray");
var newFieldArray = fieldArray;
if (typeof newFieldArray === "object") model.fieldArray = newFieldArray;
model.save(function (err, updatedModel){
if (err) throw err;
res.send(updatedModel);
});
});
});
Ich werde für alle ich dankbar sein Eingaben und Vorschläge!
auf den Versuch von Willson Ansering:
Ja, ich weiß, wenn ich model.find nennen (.. es gibt Array, wenn ich model.findOne nennen (.. es gibt ein Objekt json
Ich habe versucht, mein Beispiel zu vereinfachen und in meiner Version habe ich tatsächlich verwendet: "Modell [0] .FieldArray = newFieldArray", um das Ding von Array Faust (das Array selbst) und dann den neuen Wert zuweisen.
Das Problem besteht immer noch, es gibt mir auf model.save (.. "undefined ist keine Funktion")
Der aktuelle Code ist:
router.get('/:myId/:addThisToFieldArray', function(req, res, next) {
var myId = req.params.myId;
var addThisToFieldArray = req.params.addThisToFieldArray;
Model.find({myId: myId}).exec(function (err, model) {
if (err) throw err;
var fieldArray = model[0].fieldArray;
fieldArray.push("New thing to FieldArray");
var newFieldArray = fieldArray;
if (typeof newFieldArray === "object") model[0].fieldArray = newFieldArray;
model.save(function (err, updatedModel){
if (err) throw err;
res.send(updatedModel);
});
});
});
Dieser Code-Schnipsel (4) oben auf model.save gibt (.. "undefiniert ist keine Funktion"
Verwenden Sie 'findOne' anstelle von' finden' – friedi
ok, ich werde versuchen, das zu tun und werde kommentieren, was ich bekam – JavaJedi