sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongo ordning efter längd på array

Jag tänkte att du kanske skulle kunna använda $size , men det är bara för att hitta arrayer av en viss storlek, inte beställning.

Från mongodokumentationen:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size

Du kan inte använda $size för att hitta ett intervall av storlekar (till exempel:arrayer med mer än 1 element). Om du behöver fråga efter ett intervall, skapa ett extra storleksfält som du ökar när du lägger till element. Index kan inte användas för $size-delen av en fråga, men om andra frågeuttryck ingår kan index användas för att söka efter matchningar på den delen av frågeuttrycket.

Det verkar som att du förmodligen ganska enkelt kan göra detta med det nya aggregeringsramverket, redigera: som inte är ute ännu.http://www.mongodb.org/display/DOCS/Aggregation+Framework

Uppdatera Nu är aggregationsramverket ute...

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


  1. 5 sätt att få sekunderna från en dejt i MongoDB

  2. ServiceStack.Net Redis:Lagring av relaterade objekt vs. relaterade objekt-ID

  3. Redis - övervakning av minnesanvändning

  4. MongoDB och PostgreSQL tankar