SQL Server y Oracle tienen funciones DENSE_RANK. ¿Hay alguna manera de hacer algo similar en MongoDB sin tener que recurrir a MapReduce? En otras palabras, suponga que tiene una cláusula de selección T-SQL como esta:
SELECT DENSE_RANK() OVER(ORDER BY SomeField DESC) SomeRank
¿Cuál es la mejor manera de hacer lo mismo en MongoDB?
(Nota: Esta es una nueva publicación de la pregunta de MongoDB aquí . Espero recibir más comentarios de los DBA ...)
sql-server
nosql
mongodb
kgriffs
fuente
fuente
Respuestas:
MongoDB no tiene ningún concepto de clasificación. Lo más cercano que pude encontrar proviene de aquí :
Obviamente, esto está lejos de ser ideal. Sin embargo, MongoDB simplemente no tiene ningún tipo de funcionalidad para esto, ya que simplemente no está diseñado para este tipo de consultas.
fuente
Después de experimentar un poco, descubrí que es posible crear una función de clasificación basada en MapReduce, suponiendo que el conjunto de resultados puede caber en el tamaño máximo del documento.
Por ejemplo, supongamos que tengo una colección como esta:
Puedo realizar el equivalente aproximado de un DENSE_RANK así:
A modo de comparación, aquí está el enfoque "ingenuo" mencionado en otra parte:
Comparé ambos enfoques en una sola instancia de MongoDB 1.8.2 usando el siguiente código:
Si bien MapReduce fue más rápido de lo que esperaba, el enfoque ingenuo lo dejó fuera del agua para tamaños de colección más grandes, especialmente una vez que el caché se calentó:
Entonces, por ahora, parece que el enfoque ingenuo es el camino a seguir, aunque me interesará ver si la historia cambia más adelante este año a medida que el equipo de MongoDB continúa mejorando el rendimiento de MapReduce.
fuente