MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Ordre Mongo par longueur de tableau

Je pensais que vous pourriez utiliser $size , mais c'est uniquement pour trouver des tableaux d'une certaine taille, pas de classement.

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

Vous ne pouvez pas utiliser $size pour trouver une plage de tailles (par exemple :des tableaux avec plus d'un élément). Si vous devez interroger une plage, créez un champ de taille supplémentaire que vous incrémentez lorsque vous ajoutez des éléments. Les index ne peuvent pas être utilisés pour la partie $size d'une requête, bien que si d'autres expressions de requête sont incluses, les index peuvent être utilisés pour rechercher des correspondances sur cette partie de l'expression de requête.

Il semble que vous puissiez probablement le faire assez facilement avec le nouveau cadre d'agrégation, edit : qui n'est pas encore sorti.http://www.mongodb.org/display/DOCS/Aggregation+Framework

Mettre à jour Le cadre d'agrégation est maintenant 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
}