sql >> Database >  >> NoSQL >> MongoDB

Tel zowel de buitenste als de binnenste ingesloten array in een enkele query

U kunt $reduce gebruiken en $concatArrays om "samen te voegen" een innerlijke "array van arrays" in een enkele lijst en meet de $size van dat. Dan gewoon $add de twee resultaten samen:

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

Merk op dat een "array of arrays" het effect is van een uitdrukking als $comments.replies , dus vandaar de operatie om deze in een enkele array te maken waar je alle elementen kunt meten.



  1. Volgorde van http-verzoeken binnen een for-lus in javascript handhaven

  2. Hoe een arraygrootte in MongoDB te beperken?

  3. Mongodb geaggregeerde query, of te complex?

  4. Mongodb-installatie mislukt met homebrew en Xcode 8.1.1