的NodeJS /猫鼬。哪种方法比创建文档更可取?

时间:2012-02-16 05:22:51

标签: node.js mongoose

当我使用mongoose时,我发现了两种在nodejs中创建新文档的方法。

首先

var instance = new MyModel();
instance.key = 'hello';
instance.save(function (err) {
  //
});

第二

MyModel.create({key: 'hello'}, function (err) {
  //
});

有什么不同吗?

4 个答案:

答案 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)

创建将创建一个新文档,而保存用于更新文档。