MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Ordine Mongo per lunghezza dell'array

Ho pensato che potresti essere in grado di utilizzare $size , ma serve solo per trovare array di una certa dimensione, non per ordinare.

Dalla documentazione di mongo:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size

Non è possibile utilizzare $size per trovare un intervallo di dimensioni (ad esempio:array con più di 1 elemento). Se devi eseguire una query per un intervallo, crea un campo di dimensioni aggiuntive che incrementi quando aggiungi elementi. Gli indici non possono essere utilizzati per la porzione $size di una query, sebbene se sono incluse altre espressioni di query, gli indici possono essere utilizzati per cercare corrispondenze in quella parte dell'espressione di query.

Sembra che tu possa probabilmente farlo abbastanza facilmente con il nuovo framework di aggregazione, edit: che non è ancora uscito.http://www.mongodb.org/display/DOCS/Aggregation+Framework

Aggiorna Ora il Framework di aggregazione è uscito...

> 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
}