2016-07-06 2 views
4

나는

나는 다음과 같은 문서 내 통합 파이프 라인으로 들어오는 한 무엇을 가지고 : 나는

$project를 사용하여 원하는 것은

[ 
    { 
     "email" : "[email protected]", 
     "name" : "Organization Name", 
     "users" : [ 
      { 
       "lastName" : "Nye", 
       "firstName" : "Bill", 
       "email"  : "[email protected]" 
      }, 
      { 
       "lastName" : "Rogers", 
       "firstName" : "Mr.", 
       "email"  : "[email protected]" 
      } 
     ] 
    }, 
    ... 
] 

내가 배열의 각 내에서 firstNamelastName 필드를 $concat 할 하위 결과는 다음과 같습니다.

{ 
    "email" : "[email protected]", 
    "name" : "Organization Name", 
    "users" : [ 
     { 
      "name" : "Bill Nye", 
      "email" : "[email protected]" 
     }, 
     { 
      "name" : "Mr. Rogers", 
      "email" : "[email protected]" 
     } 
    ] 
} 

나는 시도했다 - 시도 # 1

나는 다음과 같은 통합 시도했다 :

db.organizations.aggregate([ 
    { 
     $project: { 
      email : 1, 
      name : 1, 
      users : { 
       name : { $concat : [ "$users.firstName", " ", "$users.lastName" ] }, 
       email : 1 
      } 
     } 
    } 
]); 

을 ...하지만 나는 다음과 같은 오류가 발생합니다 : 내가 '무엇

$concat only supports strings, not Array

해봤 - 시도 # 2

을 나는 또한 시도했다 다음 집계 :

db.organizations.aggregate([ 
    { 
     $project: { 
      email : 1, 
      name : 1, 
      users : { 
       name : { $concat : [ "$firstName", " ", "$lastName" ] }, 
       email : 1 
      } 
     } 
    } 
]); 

... name은 항상 null을 반환합니다.

나는 이것이 비교적 간단한 일인 것처럼 느껴진다. 그러나 나는 완전히 난처하게된다.

내가 원하는 결과를 얻으려면 어떻게해야합니까?

답변

6

당신은 단순히 문서를 보내고 $project하여이 작업을 수행하고 배열의 각 항목에 $concat 식을 적용 할 $map 집계 변수 연산자를 사용하여 적용 결과 배열을 반환 할 수 있습니다.

db.organizations.aggregate(
    [ 
     { "$project": { 
      "email": 1, 
      "name": 1, 
      "users": { 
       "$map": { 
        "input": "$users", 
        "as": "u", 
         "in": { 
          "name": { "$concat" : [ "$$u.firstName", " ", "$$u.lastName" ] }, 
          "email": "$$u.email" 
         } 
       } 
      } 
     }} 
    ] 
) 
+0

이 답변은 @ chridam의 대답뿐 아니라 다른 각도에서 문제를 다루는 동안, 나는 그의 해결책을 사용하여 끝냈다. 시간 내 줘서 고마워! – docksteaderluke

+0

@ docksteaderluke 다른 해결책은 "사실에 어긋난다"는 사실에도 불구하고 분명히 갈 길이 없기 때문에이 솔루션을 사용할 줄 알았습니다. – styvane

+0

정성스럽게 케어 하시겠습니까? 왜 그것이가는 길은 아닌가요? – docksteaderluke

관련 문제