2016-04-14 14 views
0

Küçük bir sınama sitesinde, kullanıcının günlük olarak belirli bağlantı gruplarına etkin bir şekilde harcadığı yaklaşık bir süreyi günlüğe kaydetmek istiyorum. herhangi bir kullanıcı üzerinde Thereofore ben böyle bir belge kaydetmek tıklayın:Moğol zamanlarını ayırma ve toplama zamanları

Örnek belge:

fikri zamana göre sırala bunlar, belirli bir günün tüm belgeleri süzmek ve zamanın sürekli dönemini döndürmektir
{ 
"routeGroup": "a", 
"time": new Date() 
} 

Bir kullanıcı bir rotaGroup üzerinde harcadı.

Örnek:

aşağıdaki belgeler (zaten güne göre sıralanmış ve saate göre filtrelenmiş) Verilen:

{"routegroup": "a", "time": 11:30:00}, 
{"routegroup": "a", "time": 11:31:00}, 
{"routegroup": "a", "time": 11:32:00}, 

{"routegroup": "b", "time": 11:33:00}, 
{"routegroup": "b", "time": 11:34:00}, 

{"routegroup": "a", "time": 11:35:00}, 

{"routegroup": "b", "time": 11:36:00}, 

{"routegroup": "a", "time": 11:37:00}, 
{"routegroup": "a", "time": 11:38:00}, 
{"routegroup": "a", "time": 11:39:00} 

Yani kullanıcı ilk gruptaki 3 dakika geçirmek gelmiştir "a" 2 dakika içinde izledi grup "b", grupta 1 dakika "a" vb. zamanın

Bu süreler saniyeye kadar hassastır ve ben o zaman özetlemek ve böyle bir şey iade etmek istiyorum:

// total time spend in routeGroups on day x 

{"routegroup": "a", "timeTotal": "7:00"}, 
{"routegroup": "b", "timeTotal": "3:00"} 

Soru: bu mümkün mü ve nasıl olur?

Yardımlarınız için şimdiden teşekkür ederiz!

Muff

+0

Her dakika için bir kayıt varsa, o zaman kesinlikle grup başına toplam sayıya ihtiyacın var! Evet? Tarayıcı istemci kodunda toplama işleminin etkin olmasını beklemeyin. Bu sunucu için bir iştir ve problemi basit bir anlama indirdiğinizde, çok basit cevaplar bulmak kolaydır. –

+0

Gösteri amaçlı seçtiğim dakika aralığı - saniyeler de dikkate alınmalıdır. Sorgu sunucuda yürütülür. – Raggamuffin

+0

Beğen @NeilLunn, eğer kayıt aralığınız sabitse (X dakika ya da X saniye olsun), cevap sadece grup başına toplam sayıdır. Öyleyse, buradaki soru, olay aralığınızın sabit veya değişken olması. – joao

cevap

1

toplama çerçevesi size beklenen cevap verebiliriz:

db.times.aggregate([ 
    {$group: {_id: '$routegroup', timeTotal: {$sum : 1}}}, 
    {$project: {_id: 0, routegroup: '$_id', timeTotal: 1}} 
]) 

Bu saklanan her kayıt toplam çoğunlukla kaygılarınızı dile kullanıcı etkinliği yaklaşık 1 dakika ve farz etmez günde maksimum zaman yerine (sizin/beklenen sonucun durumun söz konusu olduğu durum)

+0

Teşekkürler, ama sadece birkaç dakika arayla örneği basitleştirmeyi tercih ettim. 'timeTotal' saniyeler için mantıklı olmalı. – Raggamuffin

+0

Gördüğünüz ... Şöhretinizi, ziyaret başına benzersiz bir routegroup yapmak için değiştirebiliyor musunuz, örneğin, {"routegroup": "a", visitId: 1, "time": 11:30:00}, {"routegroup": "a", visitId: 1, "time": 11:31:00}, {"routegroup": "a", visitId: 1, "time": 11:32:00}, {"routegroup": "b", visitId: 2, "time": 11:33:00}, {"routegroup": "b", visitId: 2, "time": 11:34:00} vb. Sorguyu buna göre gruplandırabilir ve min/maks değerlerini seçebilir ve farklılıkları hesaplayabilir. Aksi takdirde, ben bu liste grubunun her bir bloğu bir kimlik olsun - böylece bu teşekkür deneyin olacak, sıralı liste –

+0

Ah ok, bir kez sen müşteri üzerinde mongodb dışında yapmak zorunda olacağını düşünürdüm! – Raggamuffin