2011-05-14 10 views
8

Digamos que tengo un montón de publicaciones (para un feed, como Twitter/Facebook/foursquare feed) en MongoDB, y cada publicación tiene location & a timestamp.Encuentra las publicaciones más recientes y más cercanas, límite 20

¿Cuál es la mejor forma de obtener las publicaciones más recientes de &, limitadas a 20 publicaciones?

Esta es también una pregunta subjetiva. Digamos que puede especificar $maxDistance y el tiempo máximo desde ahora (no estoy seguro de cómo lo haría de otra manera). ¿Cómo los especificaría? ¿Ordenarías por más reciente o más cercano, o lo mantendría al azar u ordenaría de otra manera? ¿Qué algoritmo de clasificación crees que es más interesante?

+0

¿Podría proporcionar consultas de ejemplo que no funcionan? Esto ahorraría algo de tiempo de investigación para aquellos que deberían responder. – sanmai

Respuesta

2

supongo que en última instancia termina con una lista de mensajes que tienen dos dimensiones de clasificación discretos, es decir .:

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

en realidad no importa lo que las unidades son, digamos segundos y metros. Si quieres tanto para afectar el rango de clasificación y luego se termina con un algoritmo de clasificación, por lo que es algo más simple como esto:

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

Donde C y C son constantes que se pueden manipular para sintonizar la ponderaciones. Los valores dependerán de las unidades que utilice y de la influencia de clasificación que asigne a cada dimensión.

Otra opción podría estar ordenando primero por un tiempo agregado y distancia, por lo que todas las publicaciones de hoy ordenadas por distancia; seguido por el de ayer ordenado por distancia, y así sucesivamente. O viceversa, ordenar por un rango de distancia, luego por edad, por lo que todo dentro de (0 - 1000 m) ordenado por edad; seguido por todos dentro (1001 - 2000m), y así sucesivamente.

+0

Incluya ejemplos de consultas MongoDB escritas en JavaScript. – ma11hew28

+0

¿Sabes qué? Tienes razón. No debería haberte votado. Me sentí frustrado porque su solución no explica cómo consultar MongoDB utilizando el primer algoritmo de clasificación que sugiere. Además, 'age' &' distance' no se puede almacenar en cada publicación porque son variables. 'created_time' &' location' se puede almacenar, pero ¿cómo consultaría MongoDB, ordenando por 'rank'? Si editas tu publicación para agregar la consulta de MongoDB que ordena por rango, podré votar por ti (está bloqueado ahora), y consideraría otorgarte los +50 puntos de recompensa. – ma11hew28

Cuestiones relacionadas