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

Ordinamento MongoDB sui bambini

Puoi farlo con la seguente aggregazione:

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
      }
    }
  ]
);

Per prima cosa progetto un campo extra "group_id" che viene riempito con _id o parentId a seconda del valore parentId. Il campo group_id viene utilizzato per raggruppare e fare un conteggio totale. L'ultimo passaggio è raggruppare su total_count.

Quando utilizzi mongoDb 3.4 puoi controllare $graphLookup ma per ora vi lascio all'aggregazione pre 3.4;-)