web-dev-qa-db-ja.com

マングースの方法と統計の使用は何ですか?

Mongooseのメソッドと静的関数の使用とは何ですか?通常の関数とはどう違いますか?

誰でも例との違いを説明できますか。

25
iiR

データベースロジックは、データモデル内にカプセル化する必要があります。 Mongooseには、メソッドと静的の2つの方法があります。 Methodsはドキュメントにインスタンスメソッドを追加しますが、Staticsはモデル自体に静的な「クラス」メソッドを追加します。

例が与えられた場合動物以下のモデル:

var AnimalSchema = mongoose.Schema({
  name: String,
  type: String,
  hasTail: Boolean
});

module.exports = mongoose.model('Animal', AnimalSchema);

同様のタイプの動物を見つけるメソッドと、尾を持つすべての動物を見つける静的メソッドを追加できます。

AnimalSchema.methods.findByType = function (cb) {
  return this.model('Animal').find({ type: this.type }, cb);
};

AnimalSchema.statics.findAnimalsWithATail = function (cb) {
  Animal.find({ hasTail: true }, cb);
};

メソッドと静的関数の使用例を含む完全なモデルを次に示します。

var AnimalSchema = mongoose.Schema({
  name: String,
  type: String,
  hasTail: Boolean
});

AnimalSchema.methods.findByType = function (cb) {
  return this.model('Animal').find({ type: this.type }, cb);
};

AnimalSchema.statics.findAnimalsWithATail = function (cb) {
  Animal.find({ hasTail: true }, cb);
};

module.exports = mongoose.model('Animal', AnimalSchema);

// example usage:

var dog = new Animal({
  name: 'Snoopy',
  type: 'dog',
  hasTail: true
});

dog.findByType(function (err, dogs) {
  console.log(dogs);
});

Animal.findAnimalsWithATail(function (animals) {
  console.log(animals);
});
39
Sha Alibhai

hasTailで動物を取得したい場合は、次のコード行を変更するだけです。

return this.model('Animal').find({ type: this.type }, cb);

に:

return this.model('Animal').find({ hasTail: true }, cb);

そして、静的関数を作成する必要はありません。

トークンの追加など、個々のドキュメントを操作する場合は、個々のドキュメントでメソッドを使用します。コレクション全体をクエリする場合は、静的アプローチを使用します。

2
Hamid Mian