MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Zählen Sie sowohl das äußere als auch das innere eingebettete Array in einer einzigen Abfrage

Sie können $reduce verwenden und $concatArrays zu "verschmelzen" ein inneres "Array von Arrays" in eine einzelne Liste und messen Sie den $size davon. Dann einfach $add die beiden Ergebnisse zusammen:

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

Beachten Sie, dass ein "Array von Arrays" die Auswirkung eines Ausdrucks wie $comments.replies ist , daher die Operation, diese zu einem einzigen Array zu machen, in dem Sie alle Elemente messen können.