2011-05-14 7 views
8

Diyelim ki MongoDB'de bir grup gönderi (Twitter/Facebook/foursquare gibi bir yayın için) ve her gönderide bir location & timestamp var.En son ve en yakın gönderileri bul, sınırla 20

En son & en yakın yayınları almanın en iyi yolu nedir, 20 mesajıyla sınırlı değil?

Bu ayrıca öznel bir sorudur. Şu andan itibaren $maxDistance ve maksimum süreyi belirtebileceğinizi varsayalım (aksi halde nasıl yapacağınızı bilmiyorum). Onları nasıl tanımlarsınız? En yakın ya da en yakın tarihe göre sıralama yapar mısınız, yoksa rasgele mi saklarsınız yoksa başka bir şekilde mi sıralarsınız? En çok hangi sıralama algoritması olduğunu düşünüyorsunuz?

+0

Çalışmayan örnek sorguları verebilir misiniz? Bu, cevap vermesi gerekenler için biraz araştırma zamanı kazandıracaktır. – sanmai

cevap

2

Ben gerçekten önemli birimlerdir Ne

{ age: 86400, distance: 1000 } 
{ age: 172800, distance: 5000 } 
{ age: 57600, distance: 20000 } 
{ age: 288000, distance: 8000 } 

.: yani, sen sonuçta iki ayrı sıralama boyutlara sahip mesajların listesi ile bitirmek mu varsayalım saniye ve metre diyelim. Eğer her iki sıralama sırasını etkilemez istiyorsanız böyle en basit şeye, bir sıralama algoritması ile bitirmek:

rank = (C1 * age) + (C2 * distance) 

Burada C ve C ayarının yapılması için ince ayar yapabilirsiniz sabitlerdir ağırlıklar. Değerler, kullandığınız birimlere ve her bir boyuta ne kadar derecelendirme etkisine atadığınıza bağlı olacaktır.

Bir başka seçenek, önce bir zaman toplamı ve ardından uzaklık olarak sıralanabilir; dünkü mesafeye göre sıralanır, vb. Ya da tam tersi, bir uzaklık aralığına göre sıralayın, sonra yaş, yani tüm (0 - 1000m) yaşlarına göre sırayla; sonra hepsi (1001 - 2000m) içinde, vb.

+0

Lütfen JavaScript’te yazılan örnek MongoDB sorgularını ekleyin. – ma11hew28

+0

Ne olduğunu biliyorsun. Haklısın. Seni reddetmemeliydim. Sadece hayal kırıklığına uğradım çünkü çözümünüz önerdiğiniz ilk sıralama algoritmasını kullanarak MongoDB'yi nasıl sorgulayacağınızı açıklamıyor. Ayrıca, "yaş" ve "mesafe" her gönderide saklanamaz çünkü değişkenlerdir. "created_time" ve 'location' kaydedilebilir, ancak MongoDB'yi "rank" ile sıralayarak nasıl sorgulayabilirsiniz? Sıralamanızı sıraladığınız MongoDB sorgusunu eklemek için düzenlerseniz, size oy verebilirim (Şimdi kilitlenir) ve size +50 ödül puanlarını vermeyi düşünürdüm. – ma11hew28