Io lavoro con route Nodejs Express e Mongoose per mantenere i dati. Ho eseguito il core delle operazioni CRUD senza alcun problema. Tuttavia, quando provo a eseguire alcune operazioni su uno dei campi del modello e poi provo a salvare il modello con model.save dice del metodo .save(): "undefined non è una funzione"Nodejs Mongoose Il salvataggio del modello non definito non è una funzione
Quindi, ecco il codice Il numero di frammento (1) funziona bene:
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);
});
});
});
Quindi il Modello ha 6 campi: campoA, .. B, .. C, .. D, myId per identificare come indice e un campo è Array di alcuni valori fieldArray. L'esempio sopra salva il modello, funziona bene. Tuttavia, se ora provo a fare qualcosa con fieldArray field array e poi salvo il Model, mi lancia "undefined non è una funzione" quando uso model.save(). Così il frammento (2) è il codice che produce questo errore:
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);
});
});
});
Così che cosa sopra getta "indefinito non è una funzione" sull'uso model.save (..)
Ho anche provato seconda variante dello snippet (2), chiamiamola snippet (3), incorporando il .exec() Inoltre non funziona, lancia lo stesso "indefinito non è una funzione" su model.save (..) Quindi il snippet (3) is this:
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);
});
});
});
Sarò grato per qualsiasi io nput e suggerimenti!
Ansering al tentativo di Willson:
Sì, lo so quando chiamo model.find (.. dà array, se chiamo model.findOne (.. dà un oggetto JSON
Ho provato a semplificare il mio esempio e nella mia versione ho effettivamente utilizzato il modello: " " model [0] .fieldArray = newFieldArray "per ottenere la cosa dal pugno dell'array (la matrice stessa) e quindi assegnare al nuovo valore.
Il problema persiste ancora, mi dà su model.save (.. "indefinito non è una funzione")
Il codice attuale è:
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);
});
});
});
Questo frammento (4) di cui sopra dà sulla model.save (.. "indefinito non è una funzione"
usa 'findOne' invece di' find' – friedi
ok, proverò a farlo e commenterò cosa ho ottenuto – JavaJedi