2016-10-28 3 views
0

이 모음에 따라 필드의 값을 찾아, 나는 다음과 같은 두 개의 컬렉션이 있습니다 각각에 대해MongoDB를 : 나는 MongoDB를 사용하고

{ 
    name:"Paris", 
    country:"FR", 
    population:8022, 
    location:{ 
     longitude:42.46372, 
     latitude:1.49129 
    } 
} 

:

담당자 :

{ 
    "name":"Bob", 
    "info":{ 
     "birthplace":[ 
     "Paris, France" 
     ], 
     "birthdate":[ 
     "18 June 1961" 
     ] 
    } 
} 

시 출생지가 알려진 사람, 그 도시의 위치와 인구를 찾고 싶습니다. 나는 문서를 보면서 우리는 다음과 같이 집계 $lookup를 사용할 수있는 것을 발견 :

Person.orders.aggregate([ 
    { 
     $lookup: 
     { 
      from: "City", 
      localField: "birthplace", 
      foreignField: "name", 
      as: "inventory_docs" 
     } 
    } 
]) 

을 그러나 문제는 City.name의 값이 Person.birthplace에 포함되어 있다는 것입니다, 그래서 그들은 일치하지 않을 수 있습니다, 어떤 아이디어? 감사!

답변

0

당신이 $ "$의 info.birthplace를"긴장을 풀 경우 $ 조회가 작동 첫째 :

Person.orders.aggregate([{$unwind: "$info.birthplace"}, 
         {$lookup: {from: "city", 
            localField: "info.birthplace", 
            foreignField: "name", 
            as: "inventory_docs"} 
         }]); 

그리고 는 "$의 info.birthplace는" 정말로에서 "이름" 일치해야합니다 도시 (현재 "파리, 프랑스"는 "파리"와 동일하지 않습니다.) 사람 문서 "info.birthplace""info.birthdate"이 배열은 왜 그 외에

, 그것은 분명하지 않다. 사람이 생년월일과 장소를 둘 이상 가질 수 없으므로 의미가없는 것으로 보입니다.