Javascript 使用mongoose将文档保存在node.js中的方法中

Javascript 使用mongoose将文档保存在node.js中的方法中,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我对node.js和mongoose有一个结构问题 我的模型文件看起来像 var mongoose = require('mongoose'); Schema = mongoose.Schema; var testSchema = new Schema ({ val: String }); mongoose.model('Test', testSchema); module.exports = mongoose.model('Test'); 我正在尝试制作一个更新test.va

我对node.js和mongoose有一个结构问题

我的模型文件看起来像

var mongoose = require('mongoose');
Schema = mongoose.Schema;

var testSchema = new Schema ({
     val: String
});

mongoose.model('Test', testSchema);

module.exports = mongoose.model('Test');
我正在尝试制作一个更新test.val的方法

testSchema.methods.update = function update ( val ) {
 this.val = val;
 // problem spot
}
标有“问题点”的点就是我的问题所在。我需要用输入到方法中的值来更新文档“this”-理想情况下,结果是能够将其称为
testObject.update(val)以更新我的文档

在我的控制器中,我经常使用类似以下语法设置类似的内容:

var Test = mongoose.model('Test');
var updateData = {'val': '10};
Test.findOneAndUpdate({'_id':id}, updateData, function (err, result) {
 // error checking etc
});
这在我的控制器中工作得很好,但是如果我尝试在方法中执行类似的操作,我就无法做到,因为从技术上讲,模式还没有定义,因为模式定义和方法定义在同一个文件中

TL;DR:
var Test=mongoose.model('Test')在方法内部失败,因此我不知道如何处理从它们自己的方法中更新文档

如果您有任何想法或建议,我们将不胜感激。。。我觉得我错过了一些非常基本的东西


谢谢

为什么需要更新模型中的值?您的模型应该定义可供使用的字段和函数,而不是试图修改数据。如果这是一个网页,你的控制器应该做所有的工作(除了模型验证和所有的工作),因此他们应该是更新这个值的对象。@RobertFines啊-对不起,我应该用不同的措辞。你的观点是有道理的。这看起来很方便,因为你把整个文档都放在“this”变量下面。我想我不应该用自己的方法修改文档?我不认为用模型修改文档是一种好的做法。如果您需要根据存储(或显示)需要对数据进行处理(例如,格式化地址、从电话号码中剥离格式等),我会在一个setter中为每个需要它的字段执行此操作--在此处找到一个示例: