2012-12-16 6 views
3

J'ai beaucoup de problèmes avec Spring Data et MongoDB quand il s'agit d'un champ indexé. J'ai parcouru les docs, mais ils ne sont pas très bons pour expliquer la différence entre @Indexed (unique = true) et @Indexed (unique = false). J'ai un champ que j'ai voulu indexé afin que je puisse exécuter des requêtes rapides contre lui. Dans ce cas, c'est l'adresse e-mail qui doit généralement être unique, mais il est possible que emailAddress soit nul pour une période. Cependant, une fois que vous enregistrez une adresse mail nulle, je ne peux pas avoir d'autres enregistrements avec une adresse mail nulle. Spring Data refuse d'insérer des enregistrements supplémentaires avec des adresses email nulles. Et il ne parvient pas à jeter quelque chose qui n'a pas fonctionné. En ce moment, je l'ai mis à unique = true, mais je suis en train de le mettre à unique = false pour contourner ce problème. Cela va-t-il résoudre le problème? Et quels autres problèmes pourrais-je ajouter en relaxant cela? Est-ce que MongoDB me permettra d'avoir plusieurs adresses e-mail qui sont égales et qui restent rapides à interroger?Spring Data MongoDB Indexed (unique = true)

Répondre

6

De MongoDB docs: http://docs.mongodb.org/manual/core/indexes/#unique-indexes

Donc, si vous avez une clé unique, ne définissez pas null.

Pour être honnête, dans votre cas d'utilisation (champ e-mail), je crois que vous n'avez pas besoin d'utiliser une clé unique, vous pouvez utiliser la clé clairsemée à la place, donc, les docs qui n'ont pas d'e-mail Btree index, qui va vous économiser de l'espace, et augmenter la vitesse de recherche.

Questions connexes