$lookup
simple join과 let/pipeline 기반 LookupSpec, Driver-native raw stage, unwind와 lookup count 흐름을 구성합니다.
localField / foreignField
let + pipeline + $expr
• bindConditionFields(leftField, condition, rightField)
• bindConditionFieldsLeftToObjectId(...)
• bindConditionConst, bindConditionBetween, bindConditionLike
• bindConditionExists, bindConditionIsNull, bindConditionIsNotNull
• rawStage(Bson) for Driver-native lookup pipeline stages
• unwind(preserveNullAndEmptyArrays)
• outerStage(Bson) / outerStages(...) for stages after $lookup
Lookup 실행
unwind(...)를 사용하지 않은 기본 findAll lookup은 right 결과를 List<R>로 반환합니다. 단건 left/right가 필요하면 find().executeLookup(...) 경로를 사용합니다.
Lookup + count / exists
executeLookupAndCount(...)는 $facet(data, count) 형태로 data와 totalCount를 함께 반환합니다. count/exists builder도 lookup 결과를 좌/우 tuple로 받을 수 있습니다.