2013-04-10 13 views
10

Ho un nome di raccolta Alpha_Num, Ha la seguente struttura. Sto cercando di scoprire quale coppia di numeri alfabetici apparirà il numero massimo di volte?Selezione di valori distinti dalla matrice in MongoDB

Se andiamo solo con i dati di seguito, la coppia abcd-123 appare due volte così come la coppia efgh-10001, ma la seconda non è un caso valido per me come appare nello stesso documento.

{ 
    "_id" : 12345, 
    "Alphabet" : "abcd", 
     "Numerals" : [ 
      "123", 
      "456", 
      "2345" 
     ] 
} 
{ 
    "_id" : 123456, 
    "Alphabet" : "efgh", 
    "Numerals" : [ 
      "10001", 
      "10001", 
      "1002" 
     ] 
} 

{ 
    "_id" : 123456567, 
    "Alphabet" : "abcd", 
     "Numerals" : [ 
      "123" 
     ] 
} 

Ho cercato di utilizzare il lavoro telaio aggregazione, simile sotto

db.Alpha_Num.aggregate([ 
        {"$unwind":"$Numerals"}, 
        {"$group": 
           {"_id":{"Alpha":"$Alphabet","Num":"$Numerals"}, 
           "count":{$sum:1}} 
        }, 
        {"$sort":{"count":-1}} 
        ]) 

Problemi in questa query è dà pair efgh-10001 due volte. Domanda: Come selezionare valori distinti dall'array "Numeri" nella condizione precedente?

risposta

23

Problema risolto.

db.Alpha_Num.aggregate([{ 
    "$unwind": "$Numerals" 
}, { 
    "$group": { 
      _id: { 
        "_id": "$_id", 
        "Alpha": "$Alphabet" 
      }, 
      Num: { 
        $addToSet: "$Numerals" 
      } 
    } 
}, { 
    "$unwind": "$Num" 
}, { 
    "$group": { 
      _id: { 
        "Alplha": "$_id.Alpha", 
        "Num": "$Num" 
      }, 
      count: { 
        "$sum": 1 
      } 
    } 
}]) 

raggruppamento utilizzando $ addToSet e rilassarsi di nuovo ha fatto il trucco. Hai la risposta da uno dei 10gen corsi online.

Problemi correlati