sql >> Base de Datos >  >> NoSQL >> MongoDB

Cuente la matriz incrustada externa e interna en una sola consulta

Puede usar $reduce y $concatArrays para "fusionar" una "matriz de matrices" interna en una sola lista y mida el $size de eso. Entonces simplemente $add los dos resultados juntos:

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

Teniendo en cuenta que una "matriz de matrices" es el efecto de una expresión como $comments.replies , por lo tanto, la operación para convertirlos en una sola matriz donde puede medir todos los elementos.