Mongo $lookup이 왼쪽 외부 조인이라면 일치하지 않는 문서를 제외하는 이유는 무엇입니까?
제목이 모든 것을 말해줍니다.문서가 일치 필드에 따라 일치하는 외부 문서를 생성하지 않는 경우, 파이프라인의 결과 집합에 포함되지 않는 이유는 무엇입니까?
저는 Mongo 3.2의 새로운 애그리게이터를 테스트하고 있으며, 먼저 압축을 푼 다음 문서를 그룹화하여 중첩된 배열 검색을 수행하기까지 했습니다.제게 남은 것은 결과를 충족하지 못한 모든 현지 문서를 포함시키는 것입니다.$lookup
기준, 이것이 "좌측 외측 결합"의 표준 정의라고 생각했습니다.
질문은 다음과 같습니다.
db.users.aggregate([
{
$unwind: "$profile",
$unwind: "$profile.universities"
},
{
$lookup: {
from: "universities",
localField: "profile.universities._id",
foreignField: "_id",
as: "profile.universities"
}
},
{
$group: {
_id: "$_id",
universities: {
$addToSet: "$profile.universities"
}
}
}
]).pretty()
그래서 제가 만약에.user
그것은 비어 있습니다.profile.universities
배열, 그러면 나는 그것이 그것과 상관없이 결과 세트에 포함되어야 합니다.$lookup
일치하는 항목을 반환하지만 반환하지 않습니다.내가 어떻게 이걸 할 수 있을까, 그리고 Mongo가 만든 이유는.$lookup
이런 식으로 운영할 수 있습니까?
이 동작은 다음과 관련이 없습니다.$lookup
참조된 필드가 없거나 배열이 비어 있는 문서를 생략하는 것이 기본 동작이기 때문입니다.
다음과 같은 경우에도 손상되지 않은 문서를 보존하기 위해profile.universities
빈 배열입니다. 설정할 수 있습니다.preserveNullAndEmptyArrays
에 대한 선택권.true
:
db.users.aggregate([
{
$unwind: "$profile",
$unwind: {
path: "$profile.universities",
preserveNullAndEmptyArrays: true
}
},
{
$lookup: {
from: "universities",
localField: "profile.universities._id",
foreignField: "_id",
as: "profile.universities"
}
},
{
$group: {
_id: "$_id",
universities: {
$addToSet: "$profile.universities"
}
}
}
]).pretty()
언급URL : https://stackoverflow.com/questions/39479875/if-mongo-lookup-is-a-left-outer-join-then-how-come-it-excludes-non-matching-do
'programing' 카테고리의 다른 글
Oracle 씬 드라이버 대 OCI 드라이버.장점과 단점? (0) | 2023.07.03 |
---|---|
SQL Server 데이터베이스에서 모든 저장 프로시저를 한 번에 삭제하는 방법은 무엇입니까? (0) | 2023.07.03 |
MongoDB를 사용하여 어레이에서 특정 항목 제거 (0) | 2023.07.03 |
서버를 다시 시작하지 않고 Spring Boot가 코드의 변경 사항을 로드하는 방법 (0) | 2023.07.03 |
일부 표에서 특정 열을 참조하는 모든 저장 프로시저 찾기 (0) | 2023.07.03 |