복붙노트

[MONGODB] 해당 조건과 일치하는 배열 요소 개수

MONGODB

해당 조건과 일치하는 배열 요소 개수

나는 MongoDB를 수집 아래로 참가자의 배열 "회의"라는있다 :

[
  {
    "_id" : 5b894357a0c84d5a5d221f25, 
    "conferenceName" : "myFirstConference",
    "startDate" : 1535722327, 
    "endDate" : 1535722420,
    "participants" : [
        {
            "name" : "user1", 
            "origin" : "internal", 
            "ip" : "192.168.0.2"
        },
        {
            "name" : "user2", 
            "origin" : "external", 
            "ip" : "172.20.0.3"
        }, 
    ]
  },
  ...
]

나는 다음과 같은 결과를 얻을 싶습니다 :

[
  {
     "conferenceName" : "myFirstConference",
     "startDate" : 1535722327, 
     "endDate" : 1535722420,
     "internalUsersCount" : 1
     "externalUsersCount" : 1,
  },
  ...
]

나는 아래의 요청을 시도했지만 작동하지 않습니다 :

db.getCollection("conference").aggregate([
   {
     $addFields: {
       internalUsersCount : {
            $size : { "$participants" : {$elemMatch : { origin : "internal" }}}
         },
       externalUsersCount : {
            $size : { "$participants" : {$elemMatch : { origin : "external" }}}
         }         
     }
   }
])

{: "내부" "기원"}와 { "기원": "외부"} 어떻게 일치하는 "참가자"배열 요소를 계산하는 것이 가능하다?

해결법

  1. ==============================

    1.당신은 배열의 길이를 계산하기 위해 $ 크기 집계와 함께 외부 기원과 내부 원산지를 필터링 $ 필터 집계를 사용해야합니다.

    당신은 배열의 길이를 계산하기 위해 $ 크기 집계와 함께 외부 기원과 내부 원산지를 필터링 $ 필터 집계를 사용해야합니다.

    이 같은

    db.collection.aggregate([
      { "$project": {
        "conferenceName": 1,
        "startDate": 1,
        "endDate": 1,
        "internalUsersCount": {
          "$size": {
            "$filter": {
              "input": "$participants",
              "as": "part",
              "cond": { "$eq": ["$$part.origin", "internal"]}
            }
          }
        },
        "externalUsersCount": {
          "$size": {
            "$filter": {
              "input": "$participants",
              "as": "part",
              "cond": { "$eq": ["$$part.origin", "external"] }
            }
          }
        }
      }}
    ])
    

    산출

    [
      {
        "conferenceName": "myFirstConference",
        "endDate": 1535722420,
        "externalUsersCount": 1,
        "internalUsersCount": 1,
        "startDate": 1535722327
      }
    ]
    
  2. from https://stackoverflow.com/questions/52167692/count-array-elements-that-matches-condition by cc-by-sa and MIT license