2013-05-14 5 views
0

Je suis tout à fait nouveau pour MongoDB et je suis coincé avec un problème simple (ou non):valeurs Extrait de champs distincts de la collection MongoDB

J'ai une collection de produits étiquetés comme ceci:

{ "_id": "1", "tags": { "shape" : [ "shape1","shape2" ], "color": [ "col1","col2" ] }, 
{ "_id": "2", "tags": { "shape" : [ "shape3","shape4" ], "color": [ "col3","col4" ] }, 
{ "_id": "3", "tags": { "otherCategory" : [ "value1" ], "color": [ "col5","col6" ] } 

Je veux tout sélectionner la catégorie distincte de cette collection et ont en résulte:

[ "shape", "OtherCategory" ] 

Comment puis-je y parvenir? pour l'instant il semble que ma seule option est de trouver toutes les balises et l'analyser manuellement dans le client java ... semble mauvais ;-)

Je interroge mongodb à partir d'un client java spring.

Merci pour votre aide.

+0

Je pense qu'il y a une autre façon de le faire est d'utiliser Map/Reduce, parce que 'Aggregation' dans MongoDB fonctionne à travers les documents, pas à travers les collections. – Konstantin

Répondre

1

Ok, donc je me suis retrouvé avec refactorisant mon modèle: il semble qu'il ne soit pas facile de faire des requêtes sur le contenu des documents sans faire du Map/reduce comme dit Konstantin.

Pour résoudre ce problème, j'ai créé une nouvelle collection de catégories afin que je puisse facilement les sélectionner. Cette collection est remplie lorsque les produits sont insérés.

+0

Refactoriser votre schéma pour répondre à vos besoins d'accès est généralement une bonne idée :) – Jinxcat

Questions connexes