2015-07-18 1 views
-1

J'ai un document ayant une structure de tableau dans MongoDB. Comment trier l'élément de tableau dans l'ordre croissant?requête de tri pour la structure de tableau dans mongodb

Le dessous est l'entrée:

{ 
    "id": 1, 
    "name": "sanjay", 
    "address": "Odisha", 
    "shoes": [ 
     { 
      "brand": "puma", 
      "size": "10" 
     }, 
     { 
      "brand": "bata", 
      "size": "11" 
     }, 
     { 
      "brand": "rebook", 
      "size": "9" 
     }, 
     { 
      "brand": "adidas", 
      "size": "7" 
     }, 
     { 
      "brand": "bata", 
      "size": "8" 
     } 
    ] 
} 

Quelqu'un peut-il me aider à obtenir une requête pour trier mon tout élément de tableau dans l'ordre croissant de la touche « taille »?

La valeur ci-dessous correspond à la sortie requise.

{ 
    "id": 1, 
    "name": "sanjay", 
    "address": "Odisha", 
    "shoes": [ 
     { 
      "brand": "adidas", 
      "size": "7" 
     }, 
     { 
      "brand": "bata", 
      "size": "8" 
     }, 
     { 
      "brand": "rebook", 
      "size": "9" 
     }, 
     { 
      "brand": "puma", 
      "size": "10" 
     }, 
     { 
      "brand": "bata", 
      "size": "11" 
     } 
    ] 
} 

Pourriez-vous m'aider s'il vous plaît à trouver la requête exacte?

Cordialement, Sanjay

+0

Ce message répond à vos questions. Vous devez utiliser la fonction d'agrégation pour dérouler le tableau, puis le trier. http://stackoverflow.com/questions/13449874/how-to-sort-arriage-inside-collection-record-in-mongodb – sunny

Répondre

1

Dans vos données d'échantillon, shoes.size est un type de chaîne. Avant le tri, vous devez le changer en Int. Vous pouvez utiliser la requête suivante pour le faire.

db.collection.find().forEach(function(data) { 
    for (var ii = 0; ii < data.shoes.length; ii++) { 
    printjson(data._id); 
    print(data.shoes[ii].size); 
    db.shoe.update({ 
     "_id": data._id, 
     "shoes.size": data.shoes[ii].size 
    }, { 
     "$set": { 
      "shoes.$.size": parseInt(data.shoes[ii].size) 
     } 
    }); 
    } 
}); 

Après l'avoir modifié utiliser aggregation pour trier shoes tableau par requête suivante:

db.collection.aggregate({ 
    $unwind: "$shoes" 
}, { 
    $sort: { 
    "shoes.size": 1 
    } 
}, { 
    $group: { 
    _id: "$_id", 
    "shoes": { 
     "$push": "$shoes" 
    }, 
    "name": { 
     $first: "$name" 
    } 
    } 
}).pretty() 

Modifier

Si vous souhaitez sélectionner pour brand spécifique puis ajouter des critères dans match état.

db.collection.aggregate({ 
    $unwind: "$shoes" 
}, { 
    $match: { 
    "shoes.brand": "bata" 
    } 
}, { 
    $sort: { 
    "shoes.size": 1 
    } 
}, { 
    $group: { 
    _id: "$_id", 
    "shoes": { 
     "$push": "$shoes" 
    }, 
    "name": { 
     $first: "$name" 
    } 
    } 
}).pretty() 
+0

Vishwas pourriez-vous s'il vous plaît dire comment pourrais-je trouver seulement élément de tableau correspondant dans mongoDB. par exemple je ne veux qu'un élément de tableau dans les chaussures dont la marque est "bata". –

+0

@SanjayakumarSahu S'il vous plaît se référer à mon édition. – Vishwas

+0

@SanjayakumarSahu Est-ce utile pour vous? – Vishwas