Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung der Implementierungsmethode für virtuelle Feldabfragen von Mongoose

Detaillierte Erläuterung der Implementierungsmethode für virtuelle Feldabfragen von Mongoose

巴扎黑
巴扎黑Original
2017-08-18 10:09:471748Durchsuche

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 >

  • Wenn Sie dieselbe komplexe Bedingung an mehreren Stellen abfragen müssen, können Sie virtuelle Attribute verwenden, um die Abfragebedingung zu kapseln.

Tatsächlich dienen die Abfrage virtueller Attribute sowie das Lesen und Schreiben virtueller Attribute alle der Wiederverwendung von Code.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn