2013-04-04 11 views
7

Ecco la mia collezione di MongoDB:MongoDB - Aggregazione - Per ottenere oggetti unici in serie

{ 
    "_id" : ObjectId("515d8f53175b8ecb053425c2"), 
    "category" : "Batteries", 
    "products" : [ 
     { 
      "brand" : "Duracell", 
      "item" : [ 
       "AA", 
       "AAA" 
      ] 
     }, 
     { 
      "brand" : "Everyday", 
      "item" : [ 
       "9V", 
       "AA", 
       "12V" 
      ] 
     } 
    ] 
} 

L'output che ho bisogno è

1) la lista unica di tutti gli elementi

{["AA", "AAA", "9V", "12V"]} 

e 2. elenco univoco di articoli per prodotto

{ 
    "category" : "Batteries", 
    "item": ["AA", "AAA", "9V", "12V"] 
} 

Sono molto nuovo a MongoDB e ho provato diverse funzioni di aggregazione e nulla sembra funzionare. Per favore aiuto.

risposta

14

Dopo poche altre prove, avevo risolto questo. Ecco i comandi:

db.xyz.aggregate({$project: {a: '$products.item'}}, 
    {$unwind: '$a'}, 
    {$unwind: '$a'}, 
    {$group: {_id: 'a', items: {$addToSet: '$a'}}}); 

e

db.xyz.aggregate({$project: {category: 1, a: '$products.item'}}, 
    {$unwind: '$a'}, 
    {$unwind: '$a'}, 
    {$group: {_id: '$category', items: {$addToSet: '$a'}}}); 
+4

Perché ti stai liquidando $ due volte? – Devesh

+6

perché 'elemento' è nidificato in una matrice. – Ananth

0

Non sono sicuro di quello che hai provato nella funzione di aggregazione, ma ho pensato che lo svolgimento ti aiuterà a fare lo stesso, supponendo che tu non sia in grado di farlo, abbiamo una mappa che ti permetterà di ridurre per farlo facilmente. Puoi guardare nello http://docs.mongodb.org/manual/applications/map-reduce/. Ti consente di ottenere i dati nel modo desiderato e puoi facilmente ottenere l'elenco. Penso che $ rilassarsi sulla colonna dei tag e che $ group li assegnerà sempre l'elenco di tag distinti come richiesto da te in 1 e per il secondo caso creare $ group su due categorie chiave e item che era $ unwind in precedenza.

+0

Devesh, grazie per la tua risposta. Sono stato in grado di risolvere questo problema con la sola aggregazione. Ha pubblicato anche la mia risposta. – Ananth

Problemi correlati