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 ThingSe 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?

¿Fue útil?

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í:

http://jira.mongodb.org/browse/SERVER

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top