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