MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Преброяване както на външния, така и на вътрешния вграден масив в една заявка

Можете да използвате $reduce и $concatArrays за "обединяване" вътрешен „масив от масиви“ в един списък и измерване на $size от това. След това просто $add двата резултата заедно:

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

Отбелязвайки, че „масив от масиви“ е ефектът от израз като $comments.replies , така че оттук и операцията за превръщането им в един масив, където можете да измервате всички елементи.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. embedmongo с reactivemongo процесът не излиза

  2. Дефиниране на схема Mongoose в движение от JSON-форматирано „описание“

  3. Масив от обекти на схема на Mongoose

  4. Mongoose текстово търсене с частичен низ

  5. Как да получите краткото име на месеца в SQL