MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Conte matrizes incorporadas externas e internas em uma única consulta


Você pode usar $reduce e $concatArrays para "mesclar" uma "matriz de matrizes" interna em uma única lista e meça o $size por essa. Em seguida, basta $add os dois resultados juntos:
db.posts.aggregate([
  { "$match": { _id:ObjectId("5dbdacc28cffef0b94580dbd") } },
  { "$addFields": {
    "totalBoth": {
      "$add": [
        { "$size": "$comments" },
        { "$size": {
          "$reduce": {
            "input": "$comments.replies",
            "initialValue": [],
            "in": {
              "$concatArrays": [ "$$value", "$$this" ] 
            }
          }
        }}
      ]
    }
  }}
])

Observando que um "array de arrays" é o efeito de uma expressão como $comments.replies , daí a operação para transformá-los em um único array onde você pode medir todos os elementos.