2017-10-25 2 views
0

다음과 비슷한 데이터가 내 mongo DB에 있습니다. 분명히 array1의 길이는 2이고 mongo db 스크립트를 사용하여 배열의 길이를 계산하는 방법을 찾고 있습니다. 감사합니다mongoDB 자식 요소의 배열 길이

{ 
     "_id" : ObjectId("65465465465465465468"), 
     "header" : { 
       "test" : "test", 
     }, 
     "value" : 11.763548134011048, 
     "array1" : [ 
       { 
         "q" : { 
           "value" : 250 
         } 
       }, 
       { 
         "q" : { 
           "value" : 30, 
         } 
       } 
     ], 
     "array2" : [ ] 
} 

답변

0

집계 연산자 $size을 사용할 수 있습니다. 당신이 당신의 OP, 다음 명령에서 보여준 문서 감안할 때

...
db.collection.aggregate(
    [ 
     { 
     $project: {   
      sizeOfArray1: { $size: "$array1" } 
     } 
     } 
    ] 
) 

이 ... 반환합니다

{ 
    "_id" : ObjectId("65465465465465465468"), 
    "sizeOfArray1" : 2 
} 

를이 방법은 몽고의 모든 버전에 대해 유효> = 2.6.

업데이트 :이 댓글에 응답 ... 내 배열에 도달 할 때까지 좀 더 중첩 된 객체가있는 경우

나는 그들이 동일한 코드를 사용하고 난 그냥 필드의 이름을 변경 내가 관심있는 항목?

각 '레벨'을 나타 내기 위해 .과 함께 경로 표기법을 사용하여 모든 문서 속성을 지정합니다. 문서는이처럼 보였다 그래서, 만약 :

{ 
     "_id" : ObjectId("65465465465465465468"), 
     "header" : { 
       "test" : "test", 
       "array" : [1, 2, 3] 
     }, 
     "value" : 11.763548134011048, 
     "array1" : [ 
       { 
         "q" : { 
           "value" : 250 
         } 
       }, 
       { 
         "q" : { 
           "value" : 30, 
         } 
       } 
     ], 
     "array2" : [ ] 
} 

... 다음 명령은 header 중첩 된 하위 문서 내부의 array 필드의 수를 반환 :

db.collection.aggregate(
    [ 
     { 
     $project: {   
      sizeOfHeaderArray: { $size: "$header.array" } 
     } 
     } 
    ] 
) 

을 그래서, 아마도 당신이 할 수있는 이제는 header.array을 사용하여 header 중첩 된 하위 문서 내에 array 필드를 지정해야합니다.

희망이 있습니다.

+0

고맙습니다. 아주 직관적이지는 않습니다. 배열에 도달 할 때까지 중첩 된 객체가 더 있으면 동일한 코드를 사용할 수 있으며 필드 이름을 관심있는 항목으로 변경합니다. – Sam