2014-05-14 26 views
5

Çalışanlar tarafından alınan tatillerle dolu işlem masam var. Mongodb'de aşağıdaki sql senaryosunda yardıma ihtiyacım var.Mongodb çoklu grup alanları ile farklı sayılıyor

select employee,month,year,count(distinct (holiday_type) from 
transactions group by employee,month,year 

ben MongoDB kumelenmesinin kullanmak gerekir ve bunun gibi Mongo sorgusu oluşturulmuş ve bu beni

db.transactions.aggregate([ 
    { "$group": { 
     "_id": { 
      "Month": { "$month" : "$date" }, 
      "Year": { "$year" : "$date" }, 
      "employee" : "$employee", 
      "holiday_type" : "$holiday_type" 
     }, 
     "Count_of_Transactions" : { "$sum" : 1 } 
    }} 
]); 

ben MongoDB içinde sayım ayrı mantık kullanarak karıştı yanlış çözüm sunar. Herhangi bir öneri var yol yararlı

cevap

8

Bölüm olurdu ama sonra tekrar $group, ilk "holiday_type" için "ayrı" değerlerini almak gerekir:

genel süreç farklı" olduğu gibi
db.transactions.aggregate([ 
    { "$group": { 
     "_id": { 
      "employee" : "$employee", 
      "Month": { "$month" : "$date" }, 
      "Year": { "$year" : "$date" }, 
      "holiday_type" : "$holiday_type" 
     }, 
    }}, 
    { "$group": { 
     "_id": { 
      "employee" : "$_id.employee", 
      "Month": "$_id.Month", 
      "Year": "$_id.Year" 
     }, 
     "count": { "$sum": 1 } 
    }} 
], { "allowDiskUse": true } 
); 

"SQL, kendi içinde bir gruplama işlemidir. Doğru sonuca ulaşmak için bir çift $group işlemidir. Bu sorgu assert yürütme üzerinde aşağıdaki gibi

+0

ben hata alıyorum: Komut başarısız oldu: { "ErrMsg": "istisna: $ grubu için aşıldı bellek sınırını ancak dış tür w allo vermedi geçirin allowDiskUse. true ", " kodunu girin: 16945, "tamam": 0 }: topaklama başarısız oldu – Karthi

+0

@Karthi MongoDB 2.6'da '$ group' işlemleri için bellek kullanım sınırı azaltıldı, ancak ayrıca büyük bir koleksiyonunuz da olabilir. . Düzenlemede içerdiğim gibi yöntem argümanlarının "seçenekler" bölümünde yer alan "allowDiskUse" öğesini ekleyebilirsiniz. Ayrıca [toplu] (http://docs.mongodb.org/manual/reference/method/db.collection.aggregate/) komut kılavuzuna bakın. –

+0

Haklısınız. Sorguya allowDiskuse dahil etmedim. Bu çok yararlı. – Karthi

İlgili konular