Heim > Artikel > Web-Frontend > Detaillierte Erläuterung der Implementierungsmethode für virtuelle Feldabfragen von Mongoose
Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zur Implementierung der virtuellen Feldabfrage ein. Der Artikel stellt ihn ausführlich anhand von Beispielcode vor. Er hat einen gewissen Referenz-Lernwert für alle, die ihn beim Lernen oder Arbeiten benötigen . Lasst uns gemeinsam lernen.
Vorwort
Ich weiß nicht, ob Sie wissen, dass Mungo virtuelle Attribute für das Datenmodell bereitstellt, damit es konsistenter sein kann und praktische Modelleigenschaften zum Lesen und Schreiben, ähnlich wie Accessoren in C# oder Java. Wir wissen, dass virtuelle Attribute in der Abfragephase nicht gefunden werden dürfen, da MongoDB diese Attribute tatsächlich nicht speichert. Aber kann die Abfrage virtueller Attribute durch einen Interceptor implementiert werden?
Diese Frage ist in vielen Szenarien interessant und sehr praktisch. Beispiel:
Wenn Sie eine gewalttätige Volltextsuche implementieren, müssen Sie mehrere Felder mit einem einheitlichen Abfragebegriff abgleichen, der in ein virtuelles Attribut abstrahiert werden kann >
Hooks in Mongoose
Mongoose Schema fügt .pre- und .post-Hooks zu fast allen statischen Methoden und Objektmethoden hinzu. Diese Hooks sind eigentlich Funktions-Hooks, die mit Hooks-js implementiert werden.Beispiel von der offiziellen Website:
var hooks = require('hooks') , Document = require('./path/to/some/document/constructor'); // Add hooks' methods: `hook`, `pre`, and `post` for (var k in hooks) { Document[k] = hooks[k]; } // Define a new method that is able to invoke pre and post middleware Document.hook('save', Document.prototype.save); // 上述代码在mongoose中实现 ///////////////////////////////////////////////////////////////////// // 下面的代码则是mongoose提供的Hook API // Define a middleware function to be invoked before 'save' Document.pre('save', function validate(next) { // ... });Wenn
aufgerufen wird, wird die obige Validierungsfunktion aufgerufen zurück . Document.save()
Abfrage-Hooks hinzufügen
Mongoose kapselt Hooks-js nicht weiter, was bedeutet, dass wir keine Hooks für alle Abfragemethoden setzen können, sondern nur für List Die Methoden, die einzeln überwacht werden müssen. Dies hat natürlich keinen Einfluss auf die Wiederverwendung unseres Codes.// 设置 findOne 和 find 钩子 CompanySchema.pre('findOne', preFind).pre('find', preFind);Dann beginnen wir mit der Implementierung der preFind-Funktion.
Virtuelle Abfrage implementieren
Im Hook (preFind) können wir die Abfragebedingungen ändern, um eine virtuelle Abfrage zu implementieren. Es ist erwähnenswert, dass eine vollständig steuerbare Abfrage bedeutet, dass wir jede Form einer virtuellen Abfrage implementieren können.Zum Beispiel Volltextsuche:
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Implementierungsmethode für virtuelle Feldabfragen von Mongoose. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!