J'utilise Mongoose pour conserver une collection centrale d'adresses électroniques, et j'ai également des collections pour les utilisateurs et les organisations. Dans mon application, j'associe les utilisateurs aux organisations par le biais de leurs domaines de messagerie (vérifiés). Par exemple, Acme Ltd possède les domaines acme.com et acme.co.uk, et en sélectionnant tous les courriels utilisant ces domaines, je peux établir une liste unique d'utilisateurs associés.
Les utilisateurs peuvent avoir plusieurs adresses électroniques (1 adresse principale + plusieurs adresses secondaires). Les utilisateurs ne peuvent pas partager leurs adresses électroniques (d'où le champ "verifiedBy" qui impose une relation univoque entre les utilisateurs et les adresses électroniques).
Mon schéma est (actuellement) le suivant :
const emailSchema = new Schema({
_id: {
type: String,
get: function idReverse(_id) { if(_id) return _id.split("@").reverse().join("@"); },
set: (str) => { str.trim().toLowerCase().split("@").reverse().join("@") }
},
verifiedBy: { type: String, ref: 'User' }
}, options );
Ma question est de savoir s'il vaut la peine d'inverser les parties du domaine de l'adresse e-mail dans le setter et d'inverser les parties du domaine dans le setter. de l'adresse email dans le setter, et de ne pas les inverser dans le getter - comme comme je l'ai montré - afin que l'index MongoDb sous-jacent sur _id puisse améliorer les améliorer les performances et faciliter la gestion des types de recherches que j'ai décrits ? décrit ?
Les alternatives que j'ai déjà envisagées sont les suivantes :
- Stocker l'email tel quel et utiliser une expression rationnelle pour sélectionner les utilisateurs par domaine (cela me semble coûteux en termes de traitement).
- Stocker la partie domaine dans un champ séparé et l'indexer (cela semble coûteux car il y aurait deux index et un double stockage des données).