Cet article vous présente principalement les informations pertinentes sur la mise en œuvre de la requête de champ virtuel par Mongoose. L'article le présente en détail à travers un exemple de code. Il a une certaine valeur d'apprentissage de référence pour les études ou le travail de chacun. Les amis qui en ont besoin peuvent le suivre ci-dessous. .Apprenons ensemble.
Préface
Je ne sais pas si vous savez que mangouste fournit des attributs virtuels pour le modèle de données, afin qu'il puisse être plus cohérent et des propriétés de modèle de lecture et d'écriture pratiques, similaires aux accesseurs en C# ou Java. Nous savons que les attributs virtuels ne doivent pas être trouvés dans l'étape Query, car en fait MongoDB ne stocke pas ces attributs. Mais la requête d’attributs virtuels peut-elle être implémentée via un intercepteur ?
Cette question est intéressante et assez pratique dans de nombreux scénarios. Par exemple :
Lors de la mise en œuvre d'une recherche violente en texte intégral, vous devez faire correspondre plusieurs champs avec un terme de requête unifié, qui peut être résumé dans un attribut virtuel
Hooks dans Mongoose
Mongoose Schema ajoute des hooks .pre et .post à presque toutes les méthodes statiques et méthodes objet. Ces hooks sont en fait des hooks de fonction, implémentés à l’aide de hooks-js.Exemple tiré du site officiel :
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) { // ... });
est appelé, la fonction de validation ci-dessus sera appelée dos . Document.save()
Ajouter des hooks de requête
Mongoose n'encapsule pas davantage hooks-js, ce qui signifie que nous ne pouvons pas définir de hooks pour toutes les méthodes de requête, uniquement pour List les méthodes qui doivent être surveillées une par une. Bien entendu, cela n’affecte pas la réutilisation de notre code.// 设置 findOne 和 find 钩子 CompanySchema.pre('findOne', preFind).pre('find', preFind);
Implémentation d'une requête virtuelle
Dans le hook (preFind), nous pouvons modifier les conditions de requête pour implémenter une requête virtuelle. Il convient de noter que la requête entièrement contrôlable signifie que nous pouvons implémenter n'importe quelle forme de requête virtuelle.Par exemple, recherche en texte intégral :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!