gpt4 book ai didi

javascript - Nodejs Mongoose 未定义的保存模型不是函数

转载 作者:数据小太阳 更新时间:2023-10-29 05:51:57 29 4
gpt4 key购买 nike

我使用 Nodejs Express 路由和 Mongoose 来保存数据。我毫无问题地完成了核心路由 CRUD 操作。但是,当我尝试对模型的一个字段执行一些操作,然后尝试使用 model.save 保存模型时,它说 .save() 方法:“undefined is not a function”

所以,这是代码。片段编号 (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);
});
});

});

因此模型有 6 个字段:fieldA,..B,..C,..D,myId 标识为索引,一个字段是一些值的数组 fieldArray。上面的例子保存了模型,工作正常。但是,如果我现在尝试对数组字段 fieldArray 做一些事情,然后保存模型,当我使用 model.save() 时,它会抛出“undefined is not 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);
});
});
});

所以上面的东西在使用 model.save(.. ) 时抛出“undefined is not a function”

我还尝试了代码段 (2) 的第二个变体,我们称它为代码段 (3),合并 .exec() 也不起作用,在 model.save( ..)所以片段 (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);
});
});
});

如果有任何意见和建议,我将不胜感激!

回应 Willson 的尝试:

是的,我知道当我调用 model.find(.. 它给出数组,如果我调用 model.findOne(.. 它给出一个对象 json

我试图简化我的示例,在我的版本中我确实使用了:"model[0].fieldArray = newFieldArray"从 Array fist(数组本身)中获取东西,然后分配给新值。

问题仍然存在,它给了我 model.save(.. "undefined is not a function ")

当前代码为:

    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);
});
});
});

上面的代码片段 (4) 给出了 model.save(.. "undefined is not a function"

最佳答案

当您在 Mongoose 中使用 find 方法时,它将返回一个数组,因为它可以发现一个或多个文档,因此在您的示例中,您通过其 id 查询一个特定元素,您应该获取返回数组的第一个元素:

     Model.find({myId: myId}).exec(function (err, documents) {            var model = documents[0];            if (err) throw err;            var fieldArray = model[0].fieldArray;

Here is an example:

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);
});
});

});

关于javascript - Nodejs Mongoose 未定义的保存模型不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31341340/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com