$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
• Driver-native lookup pipeline stagesのためのrawStage(Bson)
• unwind(preserveNullAndEmptyArrays)
• outerStage(Bson) / outerStages(...)は$lookupの後のステージ用です
Lookupを実行
unwind(...)를 사용하지 않은 기본 findAll lookup은 right 결과를 List<R>로 반환합니다. 단건 left/right가 필요하면 find().executeLookup(...) 경로를 사용합니다.
Lookup + count / exists
executeLookupAndCount(...)は$facet(data, count)形式でdataとtotalCountを返します。count/existsビルダーもlookup結果を左/右のタプルとして受け取ることができます。