sql >> Databáze >  >> NoSQL >> MongoDB

Počítejte vnější i vnitřní embedded pole v jednom dotazu

Můžete použít $reduce a $concatArrays "sloučit" vnitřní „pole polí“ do jednoho seznamu a měření $size toho. Pak jednoduše $add oba výsledky dohromady:

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

Všimněte si, že "pole polí" je efektem výrazu jako $comments.replies , takže proto je nutné z nich vytvořit jediné pole, kde můžete měřit všechny prvky.



  1. Jak reprezentovat pole se smíšenými typy

  2. MongoDB textové vyhledávání a řazení podle

  3. Jednoduchá kontrola stavu HTTP/TCP pro MongoDB

  4. MongoDB dotaz s podmíněnou skupinou podle příkazu