Jav*_*edi 5 javascript save undefined mongoose node.js
我使用Nodejs Express路由和Mongoose来保存数据.我做了核心路线CRUD操作没有问题.但是,当我尝试在Model的某个字段上执行某些操作然后尝试使用model.save保存Model时,它说的是.save()方法:"undefined不是函数"
所以,这是代码.片段编号(1)工作得很好:
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);
});
});
Run Code Online (Sandbox Code Playgroud)
});
所以模型有6个字段:fieldA,.. B,.. C,.. D,myId标识为索引,一个字段是一些值的字段fieldArray.上面的例子保存了Model,工作正常.但是,如果我现在尝试使用数组字段fieldArray做一些事情,然后保存模型,当我使用model.save()时,它会抛出"undefined is is a function".所以代码段(2)是产生此错误的代码:
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);
});
});
});
Run Code Online (Sandbox Code Playgroud)
所以上面的东西抛出"undefined不是函数"使用model.save(..)
我也尝试了片段的第二个变体(2),让我们称它为片段(3),并入.exec()也不起作用,在model.save(...)上抛出相同的"undefined is not a function"所以代码片段(3)是这样的:
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);
});
});
});
Run Code Online (Sandbox Code Playgroud)
我会很高兴任何意见和建议!
对威尔森的尝试进行了回顾:
是的,我知道当我调用model.find(..它给出数组,如果我调用model.findOne(..它给出一个对象json)
我试图简化我的例子,在我的版本中我实际上使用了:"model [0] .fieldArray = newFieldArray"从Array拳头(数组本身)获取东西,然后分配给新值.
问题仍然存在,它给了我model.save(.."undefined不是一个函数")
目前的代码是:
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);
});
});
});
Run Code Online (Sandbox Code Playgroud)
上面的代码片段(4)给出了model.save(.."undefined不是函数"
当您在Mongoose中使用该find方法时,它将返回一个数组,因为它可以发现一个或多个文档,因此在您的示例中,您通过其id查询一个特定元素,您应该获取返回数组上的第一个元素:
Model.find({myId: myId}).exec(function (err, documents) {
var model = documents[0];
if (err) throw err;
var fieldArray = model[0].fieldArray;
这是一个例子:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost:27017/java-jedi');
var HackerSchema = new Schema({
name: String,
languages: [String]
});
var Hacker = mongoose.model('Hacker', HackerSchema);
// instantiating the model.
var oneHacker = new Hacker();
oneHacker.name = 'Richard Stallman';
oneHacker.save(function(err) {
if (err) throw err;
// finding the document intentionally for this example
Hacker.find({_id: oneHacker._id}, function(err, hackers) {
var hacker = hackers[0];
// modifying the document and updating it.
hacker.languages.push('Lisp');
hacker.save(function(err) {
if (err) throw err;
console.log(hacker);
});
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9102 次 |
| 最近记录: |