Mongoose の「静的」メソッドと「インスタンス」メソッドの比較
疑問点
この質問は、次のようなものだと思います。 この1 と似ていますが、用語が違います。マングース4号より ドキュメント :
また、独自のドキュメントインスタンスメソッドも定義することができます。
// define a schema
var animalSchema = new Schema({ name: String, type: String });
// assign a function to the "methods" object of our animalSchema
animalSchema.methods.findSimilarTypes = function (cb) {
return this.model('Animal').find({ type: this.type }, cb);
}
<ブロッククオート
これですべての動物インスタンスにfindSimilarTypesメソッドが利用できるようになりました。
そして
<ブロッククオートモデルに静的メソッドを追加するのも簡単です。私たちのanimalSchemaの続きです。
// assign a function to the "statics" object of our animalSchema
animalSchema.statics.findByName = function (name, cb) {
return this.find({ name: new RegExp(name, 'i') }, cb);
}
var Animal = mongoose.model('Animal', animalSchema);
Animal.findByName('fido', function (err, animals) {
console.log(animals);
});
静的メソッドでは、それぞれの動物のインスタンスに
findByName
メソッドも利用できるようです。 その
statics
と
methods
オブジェクトを使用できますか?また、なぜどちらかを使用するのでしょうか?
どのように解決するのですか?
statics
はモデルで定義されたメソッドです。
methods
はドキュメント(インスタンス)に対して定義されたものです。
を使うことがあります。
静的
のようなメソッドを使うかもしれません。
Animal.findByName
:
const fido = await Animal.findByName('fido');
// fido => { name: 'fido', type: 'dog' }
また、インスタンス
メソッド
のように
fido.findSimilarTypes
:
const dogs = await fido.findSimilarTypes();
// dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]
しかし、あなたは
Animals.findSimilarTypes()
というのは、Animalsはモデルであり、"type"を持たないからです。
findSimilarTypes
を必要とします。
this.type
を必要とします。これはアニメーションのモデルには存在せず、ドキュメントインスタンスのみがモデルで定義されたそのプロパティを含むでしょう。
同様に、あなたは
fido.findByName
なぜなら
findByName
はすべてのドキュメントを検索する必要があり
fido
は単に
a
のドキュメントを参照してください。
¹まあ、技術的には
ができます。
というのも、インスタンスはコレクションにアクセスすることができるからです (
this.constructor
または
this.model('Animal')
のように、インスタンスのプロパティを使用しないインスタンスメソッドを持つことは(少なくともこのケースでは)意味がないでしょう。(おかげさまで
に感謝します。
に感謝します)。
関連
-
[解決済み】Node.jsのエラーECONNRESETをデバッグするにはどうすればよいですか?
-
[解決済み】AWS Lambdaでnodejsの「ref」モジュールを使用すると「invalid ELF header」と表示される件
-
[解決済み】ブロックスコープの宣言は、ストリクトモード以外ではまだサポートされていません。
-
[解決済み】E11000重複キーエラー mongodb mongooseのインデックス
-
[解決済み] bodyParser は非推奨です express 4
-
[解決済み] create-react-app、インストールエラー("コマンドが見つからない")。
-
[解決済み] Mongooseで文書を更新/アップサートするにはどうしたらいいですか?
-
[解決済み] Mongooseの"__v "フィールドとは?
-
[解決済み】Mongoose: findOneAndUpdateが更新されたドキュメントを返さない
-
[解決済み】mongooseの_idと文字列の比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラーです。EACCES: 権限が拒否されました、アクセス '/usr/local/lib/node_modules' 。
-
[解決済み】Nodejsの解決方法:Error: ENOENT: そのようなファイルまたはディレクトリがありません
-
[解決済み] MongoDB でコレクションを日付順に並べるには?
-
[解決済み] ブラウザで動作しているURLで「connect ETIMEDOUT」エラーが発生する原因は何ですか?
-
[解決済み] S3 Bucket に何かを送信しようとすると、AWS Missing credentials が表示される (Node.js)
-
[解決済み] Yarn にパッケージを強制的に再インストールさせるにはどうしたらいいですか?
-
[解決済み] エラーです。Cannot find module 'ejs'
-
[解決済み] node.js - リクエスト - "emitter.setMaxListeners() "はどのように?
-
[解決済み] Express.js req.bodyが未定義です。
-
[解決済み] Mongoose Schema がモデルとして登録されていません。