sql >> Database >  >> NoSQL >> MongoDB

MongoDB sorteren op kinderen

U kunt het doen met de volgende aggregatie:

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

Eerst projecteer ik een extra veld "group_id" dat wordt gevuld met de _id of de parentId, afhankelijk van de parentId-waarde. Het group_id-veld wordt gebruikt om te groeperen en een totaaltelling te maken. De laatste stap is om te groeperen op het totaal aantal.

Als u mongoDb 3.4 gebruikt, kunt u $graphLookup bekijken maar voor nu laat ik je achter met de pre 3.4-aggregatie;-)




  1. stel veld als leeg in voor mongo-object met behulp van mangoest

  2. JSON-pad bovenliggend object of gelijkwaardige MongoDB-query

  3. MongooseJS/MongoDB zoek exacte woordgroep

  4. Volgorde van $lt en $gt in MongoDB-bereikquery