sql >> Databasteknik >  >> NoSQL >> MongoDB

Räkna både yttre och inre inbäddad array i en enda fråga

Du kan använda $reduce och $concatArrays för att "sammanfoga" en inre "array av arrayer" i en enda lista och mät $storlek av det. Sedan är det bara att $add de två resultaten tillsammans:

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

Notera att en "array of arrays" är effekten av ett uttryck som $comments.replies , så därav operationen att göra dessa till en enda array där du kan mäta alla element.



  1. Mongodb kan inte starta på grund av WiredTiger.turtle-behörigheter

  2. Ogiltig ns vid anslutning till mongodb-server

  3. Utför anpassad funktion på MongoDB med Casbah/Scala

  4. Jämför mellan två fält i ett dokument i MongoDB