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

Tri MongoDB sur les enfants

Vous pouvez le faire avec l'agrégation suivante :

db.collection.aggregate(
  [
    {
      $project: {
      group_id : { $cond : { if: { $ne: [ "$parentId", "" ] }, then: "$parentId", else: "$_id" }},
      count :1
      }
    },
    {
      $group: {
      _id : "$group_id",
      total_count : { $sum: "$count" }
      }
    },
    {
      $sort: {
      total_count : -1
      }
    }
  ]
);

Tout d'abord, je projette un champ supplémentaire "group_id" qui est rempli avec le _id ou le parentId en fonction de la valeur parentId. Le champ group_id est utilisé pour regrouper et faire un décompte total. La dernière étape consiste à regrouper sur le total_count.

Lorsque vous utilisez mongoDb 3.4, vous pouvez consulter $graphLookup mais pour l'instant je vous laisse avec l'agrégation pré 3.4;-)