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

Compter les tableaux intégrés externes et internes dans une seule requête

Vous pouvez utiliser $reduce et $concatArrays pour "fusionner" un "tableau de tableaux" interne en une seule liste et mesurez le $size de ça. Puis simplement $add les deux résultats ensemble :

db.posts.aggregate([
  { "$match": { _id:ObjectId("5dbdacc28cffef0b94580dbd") } },
  { "$addFields": {
    "totalBoth": {
      "$add": [
        { "$size": "$comments" },
        { "$size": {
          "$reduce": {
            "input": "$comments.replies",
            "initialValue": [],
            "in": {
              "$concatArrays": [ "$$value", "$$this" ] 
            }
          }
        }}
      ]
    }
  }}
])

Notant qu'un "tableau de tableaux" est l'effet d'une expression comme $comments.replies , donc d'où l'opération pour les transformer en un seul tableau où vous pouvez mesurer tous les éléments.