¿Ordenar elementos en MongoDB según el tamaño de una matriz con MongoMapper?
-
22-09-2019 - |
Pregunta
Me gustaría seleccionar una colección de elementos ordenados según la cantidad de elementos dentro de una matriz.Con suerte, el siguiente ejemplo aclarará mi explicación bastante pobre:
class Thing
include MongoMapper::Document
key :name, String
key :tags, Array
end
Me gustaría recuperar todo Thing
Se ordena desde los que tienen más etiquetas hasta los que tienen menos.Las etiquetas en este ejemplo son simplemente cadenas dentro de la matriz de etiquetas.Básicamente quiero algo que signifique lo mismo que esto (pero que funcione):
Thing.all(:order => 'tags.count desc')
es posible?
Solución
El servidor central actualmente no soporta el cálculo de la tamaño de una matriz y, a continuación la clasificación por eso. Creo que la mejor opción para el momento sería la de almacenar en caché el tamaño de la matriz por su cuenta, y añadir un índice en ese campo.
class Thing
include MongoMapper::Document
key :name, String
key :tags, Array
key :tag_size, Integer, :default => 0, :index => true
end
A continuación, sólo añadir una devolución de su modelo que tag_size cambios en guardar.
Si esta es una característica que le gustaría ver en el servidor central, puede agregar un caso aquí: