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

Conta l'array incorporato sia esterno che interno in una singola query

Puoi utilizzare $reduce e $concatArrays per "unire" un "array di array" interno in un unico elenco e misurare il $size di quella. Quindi semplicemente $add i due risultati insieme:

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

Notare che una "matrice di array" è l'effetto di un'espressione come $comments.replies , quindi da qui l'operazione per trasformarli in un unico array in cui puoi misurare tutti gli elementi.