2016-08-31 3 views
1
/*first Table*/ 
DBCollection coll = db.getCollection("orgmembers"); 

/*second table*/ 
     DBObject lookupFields = new BasicDBObject("from", "orgcenters"); 
     lookupFields.put("localField", "mappings.centerId"); 
     lookupFields.put("foreignField", "_id"); 
     lookupFields.put("as", "collegeDetails"); 
     DBObject lookup = new BasicDBObject("$lookup", lookupFields); 

orgcenters 스키마 _id foriegn 키를 비교하지 않습니다조회는

{"_id" : ObjectId("5496d0a50cf2abd6b103b1a2"), "code" : "CEN-DVG", "name" : "Davangere"} 

orgmember 스키마 MongoDB의에서 조회가 foriegn 키 _id

과 비교하지 않는

{ "dob" : "1989-01-13", 
    "firstName" : "Sandeep", 
    "mappings" : [ { "programId" : "5496d0cd0cf2abd6b103b1a6", "centerId" : "5496d0a50cf2abd6b103b1a2"}] 
} 

+0

orgcenters 테이블이 { "_id를": ObjectId가을 ("5496d0a50cf2abd6b103b1a2"), "코드": "CEN-DVG", "이름": "다바 나게 레", } – aksy91

+0

orgmember 테이블 { "생년월일"가 "1989년 1월 13일", "firstName을" "하기 Sandeep", "매핑"[ { "programId": "5496d0cd0cf2abd6b103b1a6" "centerId": "5496d0a50cf2abd6b103b1a2"}]}} – aksy91

+1

에도 코드가 불완전하기 때문에 이러한 콜렉션을 집계하고 올바로 처리할지 여부를 대략적으로 추측 할 수 있도록 한 가지 실수가 즉시 있습니다. 즉, orgmember의 centerId는 문자열이며 orgcen의 _id는 문자열입니다. ters는 ObjectId입니다. 일치하지 않습니다. 동일한 데이터 유형을 사용해야합니다. – mtj

답변

1

localField가 배열 인 경우 파이프 라인을 에 $ unwind 단계를 추가해야합니다. 이 페이지의 예를 참조하십시오. orgmember schema에서 $lookup

를 참조하시기 바랍니다 우리는 배열로 매핑을 가지고 있으며, 따라서 그것은 $ 조회를 실행하기 전에이 풀리고해야합니다. 우리가 문자열로

주를 모두 아이디의이있는 경우

이 쿼리가 작동합니다 : 문자열에 두 아이디의 변경하시기 바랍니다.

db.orgmember.aggregate([ 
{ 
    $unwind : "$mappings" 
}, 
{ 
    $lookup: 
    { 
     from: "orgcenters", 
     localField: "mappings.centerId", 
     foreignField: "_id", 
     as: "collegeFields" 
    } 
}]) 

쿼리에서 $ unwind 옵션을 놓친 경우 결과가 표시되지 않습니다.

희망 하시겠습니까!

+0

lookupFields = new BasicDBObject ("from", "orgcenters");를 추가했습니다. lookupFields.put ("localField", "{$ toObjectId : $ mappings.centerId}"); lookupFields.put ("foreignField", "_id"); lookupFields.put ("as", "collegeDetails"); DBObject lookup = new BasicDBObject ("$ lookup", lookupFields); // 아직도 작동하지 않았다. – aksy91

관련 문제