web-dev-qa-db-ja.com

Nodejs / mongoose。文書を作成するにはどのアプローチが望ましいですか?

Mongooseで作業するときにnodejsで新しいドキュメントを作成する2つの方法を見つけました。

最初

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

2番目

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

違いはありますか?

39
Erik

はい、主な違いは、保存する前に、または新しいモデルの構築中に表示される情報への反応として計算を実行できることです。最も一般的な例は、モデルを保存する前にモデルが有効であることを確認することです。他の例としては、保存する前に欠落しているリレーション、他の属性に基づいてその場で計算する必要がある値、存在する必要があるがデータベースに保存できない可能性のあるモデル(トランザクションの中止)などがあります。

だからあなたができることのいくつかの基本的な例として:

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) {
  //
});
44
Swift

このコードは、ドキュメントの配列をデータベースに保存するためのものです。

_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)'は、モデルの名前でコレクションを作成し、ドキュメントのみを配列に.save()メソッドを実行することを許可します。

または、次の方法で1つのドキュメントのみを保存できます。

_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)
_

});

3
Morris

私は、事前定義されたユーザー値と検証チェックモデル側の簡単な例を好みます。

   // 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.
});
1
Oliver Dixon