2013-03-27 23 views
20

Hatalardan oluşan bir koleksiyonum var, böylece her hata bir date alanını taşıyor. Hataları yalnızca DAY olarak nasıl toplayabilir/sayar/gruplayabilirim (yani günün saatini hariç tutabilir miyim?) Sanırım biraz akıllı projeksiyon uygulanmalı.Toplama çerçevesinde tam zaman damgası verildiği zaman nasıl toplanır?

+3

kullanarak belirli tarih biçimi ile dize için zaman damgası alanı dönüştürebilir, damgaları tarih fonksiyonları yalnızca kullanılamaz tarih alanları Bu sadece bir not çünkü İngilizler beni o zaman cevaplamaktan attı. – Sammaye

+0

@Sammaye: teşekkürler, soru düzeltildi. – BreakPhreak

cevap

42

Sen şu toplama operatörleri kullanarak bunu yapabilirsiniz:

Bu, her tarih için hata sayısını verir:

db.errors.aggregate(
    { $group : { 
     _id: { 
      year : { $year : "$date" },   
      month : { $month : "$date" },   
      day : { $dayOfMonth : "$date" }, 
     }, 
     count: { $sum: 1 } 
    }} 
); 

Bu örnek, hata belgelerde tarih alanı date ve tip BSON Date ait olduğunu varsayar. Orada MongoDB bir zaman damgası türü de, ancak bu tip kullanımı explicitely the documentation tarafından teşvik edilmez:

Not: BSON Damgası tipi iç MongoDB kullanım içindir. Çoğu vakasında, uygulama geliştirmede, BSON date tipini kullanmak isteyeceksiniz. Daha fazla bilgi için Tarihe bakınız.

+0

Sadece bir saniye lütfen - burada '_id' nerede? Bu bir şey mi yoksa (büyük ihtimalle) bir şey mi eksik? – BreakPhreak

+0

@BreakPhreak Sabit (Sanırım şu anda tekrar test edemiyorum) – Philipp

+3

PS: bir sidenote olarak, '_id' tarafından da ($ olarak da gösterilebilir) olabilir. – BreakPhreak

2

Bunu zaman damgaları ve tarih arasındaki farkı tanımlamak için impportant olduğunu referans Gelecek için $project (aggregation)

aggregate([ 
    { 
     '$project': { 
      newFieldName: {'$dateToString': {format: '%Y-%m-%d', date: '$yourDateFieldName'}} 
     } 
    }, { 
     '$group': { 
      _id: {newFieldName: '$newFieldName'}, 
      viewCount: {'$sum': 1} 
     } 
    }, 
    {'$sort': {'_id.newFieldName': 1}} 
], {})