MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Ordem Mongo por comprimento da matriz


Achei que você poderia usar $size , mas isso é apenas para encontrar arrays de um determinado tamanho, não ordenando.

Da documentação do mongo:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size

Você não pode usar $size para encontrar um intervalo de tamanhos (por exemplo:arrays com mais de 1 elemento). Se você precisar consultar um intervalo, crie um campo de tamanho extra que você incrementa ao adicionar elementos. Os índices não podem ser usados ​​para a parte $size de uma consulta, embora, se outras expressões de consulta forem incluídas, os índices podem ser usados ​​para pesquisar correspondências nessa parte da expressão de consulta.

Parece que você pode fazer isso com bastante facilidade com a nova estrutura de agregação, edit: que ainda não foi lançado.http://www.mongodb.org/display/DOCS/Aggregation+Framework

Atualizar Agora o Quadro de Agregação está disponível...
> 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
}