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

Tæl både ydre og indre integreret array i en enkelt forespørgsel

Du kan bruge $reduce og $concatArrays for at "flette" en indre "array af arrays" i en enkelt liste og mål $størrelse af det. Så skal du blot $add de to resultater sammen:

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

Bemærk, at en "array af arrays" er effekten af ​​et udtryk som $comments.replies , så derfor operationen for at gøre disse til et enkelt array, hvor du kan måle alle elementer.



  1. Hvordan kan jeg flade dobbelte arrays i mongoDB?

  2. Afinstaller MongoDB på Mac OS X

  3. Returner dokument med Max Sub Document

  4. Lagring af nøgler med præfiks, der udløber i redis