Digamos que tengo un sitio web como digg.com Tengo un montón de artículos y la gente puede votar sobre los artículos que les gusta.MongoDB Schema Design - Votando en las publicaciones
Quiero poder consultar para obtener los artículos con más votos dentro de un tiempo determinado (última hora, último día, la semana pasada) ordenado por el número de votos.
Como es habitual en MongoDB, hay varias formas de implementar esto, pero no estoy seguro de cuál es el correcto.
- Un documento de mensajes, que contiene una matriz de Votos - Votos en sí son documentos que contienen ID de usuario, nombre de usuario y la fecha de la votación:
{
"_id": "ObjectId(xxxx)",
"title": "Post Title",
"postdate": "21/02/2012+1345",
"summary": "Summary of Article",
"Votes": [
{
"userid":ObjectId(xxxx),
"username": "Joe Smith",
"votedate": "03/03/2012+1436"
},
]
}
- Una colección votaciones separadas, que contienen detalles de un individuo voto y una referencia al puesto que fue votado en:
{
"_id": "ObjectId(xxxx)",
"postId": ObjectId(xxxx),
"userId": ObjectId(xxxx),
"votedate": "03/03/2012+1436"
}
El primero es más Documentey pero no tengo idea de cómo consultar el conjunto de votos para obtener los documentos con más votos en las últimas 24 horas.
Me estoy inclinando hacia el segundo, ya que sería más fácil consultar el número de votos agrupados por votación, creo, pero no estoy seguro de qué tan bien funcionaría. Así es como lo harías en las bases de datos relacionales, pero no parece muy documentado, pero no estoy seguro si es un problema, ¿o sí?
¿O utilizo una combinación de los dos? También haría este tipo de consulta agregada en tiempo real, cada carga de página. ¿O acabo de ejecutar la consulta decir una vez por minuto y almacenar los resultados en una colección de resultados de la consulta?
¿Cómo implementaría este esquema?
pregunta relacionada: http://stackoverflow.com/questions/ 9296793/eficiente de documentos de formato-a-Store-votos-en-mongo-db –
también relacionado: http://stackoverflow.com/questions/7046462/best-way-to-model-a-voting-system-in -mongodb – wmassingham