的NodeJS /mongoose。 哪种方法比创build文档更可取?
当我使用mongoose工作时,我发现了两种在nodejs中创build新文档的方法。
第一 :
var instance = new MyModel(); instance.key = 'hello'; instance.save(function (err) { // });
第二
MyModel.create({key: 'hello'}, function (err) { // });
有什么区别吗?
是的,主要区别在于在保存之前进行计算的能力,或者是在构build新模型时出现的信息的反应。 最常见的例子是在试图保存模型之前确保模型是有效的。 其他一些示例可能会在保存之前创build任何缺失的关系,需要基于其他属性dynamic计算的值以及需要存在但可能永远不会保存到数据库的模型(exception事务)。
所以作为你可以做的一些事情的基本例子:
var instance = new MyModel(); // Validating assert(!instance.errors.length); // Attributes dependent on other fields instance.foo = (instance.bar) ? 'bar' : 'foo'; // Create missing associations AuthorModel.find({ name: 'Johnny McAwesome' }, function (err, docs) { if (!docs.length) { // ... Create the missing object } }); // Ditch the model on abort without hitting the database. if(abort) { delete instance; } instance.save(function (err) { // });
此代码用于将文档数组保存到数据库中:
app.get("/api/setupTodos", function (req, res) { var nameModel = mongoose.model("nameModel", yourSchema); //create an array of documents var listDocuments= [ { username: "test", todo: "Buy milk", isDone: true, hasAttachment: false }, { username: "test", todo: "Feed dog", isDone: false, hasAttachment: false }, { username: "test", todo: "Learn Node", isDone: false, hasAttachment: false } ]; nameModel.create(listDocuments, function (err, results) { res.send(results); });
'nameModel.create(listDocuments)'允许使用model的名称创build一个集合,并且仅对文档执行.save()
方法。
或者,您可以用这种方式保存一个唯一的文档:
var myModule= mongoose.model("nameModel", yourSchema); var firstDocument = myModule({ name: String, surname: String }); firstDocument.save(function(err, result) { if(if err) throw err; res.send(result)
});
我更喜欢用预定义的用户值和validation检查模型一个简单的例子。
// Create new user. let newUser = { username: req.body.username, password: passwordHashed, salt: salt, authorisationKey: authCode }; // From require('UserModel'); return ModelUser.create(newUser);
那么你应该在模型类中使用validation器(因为这可以在其他位置使用,这将有助于减less错误/加快发展)
// Save user but perform checks first. gameScheme.post('pre', function(userObj, next) { // Do some validation. });