2013-04-10 16 views
10

Alpha_Num adlı bir koleksiyona sahibim, Aşağıdaki yapıya sahip. Hangi Alfabe-Rakamları çiftinin maksimum sayıda görüneceğini öğrenmeye çalışıyorum?MongoDB'deki Array öğesinden farklı değerler seçme

Aşağıdaki verilerle devam edersek, abcd-123 çifti, efgh-10001 çifti olarak iki kez görünür, ancak ikincisi, aynı belgede göründüğü için benim için geçerli bir durum değildir.

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

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

Ben bu sorgu iki kez çift efgh-10001 verir ise kümelenme çerçeve çalışmalarını
db.Alpha_Num.aggregate([ 
        {"$unwind":"$Numerals"}, 
        {"$group": 
           {"_id":{"Alpha":"$Alphabet","Num":"$Numerals"}, 
           "count":{$sum:1}} 
        }, 
        {"$sort":{"count":-1}} 
        ]) 

altına Problem gibi bir şey kullanmaya çalıştı. Soru: Yukarıdaki durumda "Sayılar" dizisinden farklı değerler nasıl seçilir?

cevap

23

Sorun çözüldü. $ AddToSet kullanarak gruplama ve tekrar gevşemek

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 
      } 
    } 
}]) 

hile yaptı. 10gen online kursundan bir cevap aldım.

İlgili konular