web-dev-qa-db-ja.com

mongooseでドキュメントを更新および保存するメソッドを作成しますか?

公式ドキュメント を確認した後、ドキュメントを作成および更新するためにmongoose内で使用するメソッドを作成する方法がまだわかりません。

どうすればこれを行うことができますか?

私はこのようなことを念頭に置いています:

mySchema.statics.insertSomething = function insertSomething () {
    return this.insert(() ?
}
29
Industrial

メソッドは、モデルの現在のインスタンスと対話するために使用されます。例:

var AnimalSchema = new Schema({
    name: String
  , type: String
});

// we want to use this on an instance of Animal
AnimalSchema.methods.findSimilarType = function findSimilarType (cb) {
  return this.find({ type: this.type }, cb);
};

var Animal = mongoose.model('Animal', AnimalSchema);
var dog = new Animal({ name: 'Rover', type: 'dog' });

// dog is an instance of Animal
dog.findSimilarType(function (err, dogs) {
  if (err) return ...
  dogs.forEach(..);
})

インスタンスとやり取りしたくないが、モデルに関連するものを実行する場合(たとえば、「Rover」という名前のすべての動物を検索する場合)に使用されます。

モデルのインスタンスを(dbに)挿入/更新する場合は、methodsを使用します。ものを保存/更新する必要がある場合は、save関数を使用できます(すでにMongooseに存在します)。例:

var Animal = mongoose.model('Animal', AnimalSchema);
var dog = new Animal({ name: 'Rover', type: 'dog' });
dog.save(function(err) {
  // we've saved the dog into the db here
  if (err) throw err;

  dog.name = "Spike";
  dog.save(function(err) {
    // we've updated the dog into the db here
    if (err) throw err;
  });
});
49
alessioalex

静的メソッド内から、次の操作を実行して新しいドキュメントを作成することもできます。

schema.statics.createUser = function(callback) {
  var user = new this();
  user.phone_number = "jgkdlajgkldas";
  user.save(callback);
};
58
hydrozen

.save()を呼び出す関数を作成する必要があるとは思わないでください。モデルを保存する前に行う必要があることは、 。pre() を使用して実行できます。

モデルが作成または更新されているかどうかを確認する場合は、this.isNew()の確認を行います。

1
Xerri