当我使用mongoose时,我发现了两种在nodejs中创建新文档的方法。
首先:
var instance = new MyModel();
instance.key = 'hello';
instance.save(function (err) {
//
});
第二
MyModel.create({key: 'hello'}, function (err) {
//
});
有什么不同吗?
答案 0 :(得分:42)
是的,主要区别在于您在保存之前进行计算的能力,或者在您构建新模型时对信息的反应。最常见的示例是在尝试保存模型之前确保模型有效。其他一些示例可能是在保存之前创建任何缺失的关系,需要根据其他属性动态计算的值,以及需要存在但可能永远不会保存到数据库的模型(中止的事务)。
作为您可以做的一些事情的基本示例:
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) {
//
});
答案 1 :(得分:3)
此代码用于将文档数组保存到数据库中:
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的集合,并仅将文档执行.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)
});
答案 2 :(得分:1)
我更喜欢使用预定义的用户值和验证检查模型方面的简单示例。
// Create new user.
let newUser = {
username: req.body.username,
password: passwordHashed,
salt: salt,
authorisationKey: authCode
};
// From require('UserModel');
return ModelUser.create(newUser);
然后你应该在模型类中使用验证器(因为这可以在其他位置使用,这将有助于减少错误/加快开发)
// Save user but perform checks first.
gameScheme.post('pre', function(userObj, next) {
// Do some validation.
});
答案 3 :(得分:0)
创建将创建一个新文档,而保存用于更新文档。