sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongo orden por longitud de matriz

Pensé que podrías usar $size , pero eso es solo para encontrar arreglos de cierto tamaño, no para ordenar.

De la documentación de mongo:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size

No puede usar $size para encontrar un rango de tamaños (por ejemplo:arreglos con más de 1 elemento). Si necesita consultar un rango, cree un campo de tamaño adicional que incremente cuando agregue elementos. Los índices no se pueden usar para la parte de tamaño de $ de una consulta, aunque si se incluyen otras expresiones de consulta, se pueden usar índices para buscar coincidencias en esa parte de la expresión de consulta.

Parece que probablemente pueda hacer esto con bastante facilidad con el nuevo marco de agregación, editar: que aún no ha salido. http://www.mongodb.org/display/DOCS/Aggregation+Framework

Actualizar Ahora el marco de agregación está disponible...

> db.test.aggregate([
  {$unwind: "$answers"}, 
  {$group: {_id:"$_id", answers: {$push:"$answers"}, size: {$sum:1}}}, 
  {$sort:{size:1}}]);
{
"result" : [
    {
        "_id" : ObjectId("5053b4547d820880c3469365"),
        "answers" : [
            {
                "content" : "answer1"
            },
            {
                "content" : "2nd answer"
            }
        ],
        "size" : 2
    },
    {
        "_id" : ObjectId("5053b46d7d820880c3469366"),
        "answers" : [
            {
                "content" : "answer1"
            },
            {
                "content" : "2nd answer"
            },
            {
                "content" : "The third answer"
            }
        ],
        "size" : 3
    }
  ],
  "ok" : 1
}