2013-07-11 2 views
10

Verilerimi güne göre birleştirmeye çalışıyorum, böylece bir grafikte oluşturabilirim. Bunu, $year, $month ve $dayOfMonth tarafından gruplandırılarak başarıyla yapmayı başardım. Bununla birlikte, bu benim tarihimin şimdi son sonuçta üç bölüme ayrıldığı anlamına geliyor. Üç sayıyı bir tarih biçimine geri döndürmenin bir yolu var mı, yoksa tarihe bölünmeyen bir başka şey var mı? Burada

Sentiment.aggregate([ 
    { 
     $match: { 'content.term' : term_id } 
    }, { 
     $group: { 
      _id: { 
       year  : { $year  : '$created_at' }, 
       month  : { $month  : '$created_at' }, 
       dayOfMonth : { $dayOfMonth : '$created_at' }, 
      }, 
      sum : { $sum : '$score'}, 
      count : { $sum : 1 } 
     }, 
    }, { 
     $project: { 
      _id : 0, 
      date : '$_id', 
      sum : 1, 
      count : 1, 
      avg : { $divide: ['$sum', '$count'] } 
     } 
    } 
], function(err, result){ 
    if(err) callback(err); 
    else callback(null, result); 
}); 

Ve örnek bir sonucudur edilir: Aşağıda sahip olduğumun bir çalışma örneğidir İdeal

[ 
    { 
    "sum": 201, 
    "count": 3, 
    "date": { 
     "year": 2013, 
     "month": 7, 
     "dayOfMonth": 5 
    }, 
    "avg": 67 
    }, 
    { 
    "sum": 186, 
    "count": 6, 
    "date": { 
     "year": 2013, 
     "month": 7, 
     "dayOfMonth": 8 
    }, 
    "avg": 31 
    }, 
    { 
    "sum": 834, 
    "count": 9, 
    "date": { 
     "year": 2013, 
     "month": 7, 
     "dayOfMonth": 9 
    }, 
    "avg": 92.66666666666667 
    } 
] 

, ben zorunda kalmamak date geçerli bir tarih olmasını istiyorum daha sonra dönüştürmek için. $concat kullanmayı denedim, ancak yalnızca dizelerle çalışıyor. Bu fark yaratırsa Mongoose kullanıyorum. $first, $last, $min veya $max: Eğer yıl, ay ve gün geçtikçe belgeleri grupluyorsanız olarak, saat ve dakika işe yaramaz, olduğunu varsayarsak

cevap

19

, bir tarih örneği almak için bu operatörlerin birini kullanabilirsiniz.

Sentiment.aggregate([ 
    { 
     $match: { 'content.term' : term_id } 
    }, { 
     $group: { 
      _id: { 
       year  : { $year  : '$created_at' }, 
       month  : { $month  : '$created_at' }, 
       dayOfMonth : { $dayOfMonth : '$created_at' }, 
      }, 
      dt_sample : { $first : '$created_at' }, 
      sum : { $sum : '$score'}, 
      count : { $sum : 1 } 
     }, 
    }, { 
     $project: { 
      _id : 0, 
      date : '$dt_sample', 
      sum : 1, 
      count : 1, 
      avg : { $divide: ['$sum', '$count'] } 
     } 
    } 
], function(err, result){ 
    if(err) callback(err); 
    else callback(null, result); 
}); 

Rasgele saat, dakika ve saniye olan bir tarih alanına sahip olacaksınız.

+0

Aradığım şey budur. Teşekkürler! –

+5

Bu neden çalışıyor? –