>  Q&A  >  본문

Apollo GraphQL 해석기에서 사용되는 상위 매개변수와 Mongoose 모델 조인을 위한 MongoDB 집계의 $lookup 단계 비교

<p>저는 Apollo GraphQL과 Mongoose를 사용하여 백엔드 애플리케이션을 개발하고 있습니다. 일대다 관계를 갖는 User와 Post라는 두 가지 모델이 있습니다(한 사용자가 여러 게시물을 가질 수 있지만 하나의 게시물은 한 사용자에게 속함). </p> <p>GraphQL 스키마의 User 필드를 쿼리하여 사용자 ID로 사용자와 해당 사용자에게 속한 모든 게시물을 가져오고 싶습니다. 또한 내 게시물 유형의 작성자 필드를 쿼리하여 게시물을 작성한 사용자를 확인하고 싶습니다. </p> <p>MongoDB에서 서로 다른 컬렉션의 데이터를 조인하는 방법에는 Apollo GraphQL 해석기에서 상위 매개변수를 사용하거나 MongoDB 집계에서 $lookup 단계를 사용하는 두 가지 방법이 있다는 것을 배웠습니다. </p> <p>부모 매개변수는 부모 필드에 대한 파서에서 반환된 결과를 포함하는 개체입니다. 상위 매개변수를 사용하면 상위 필드 또는 유형의 데이터에 액세스하고 이를 하위 필드 또는 유형에 전달할 수 있습니다. 예를 들어, 다음과 같이 몽구스 모델에 합류하는 데 사용할 수 있습니다. </p> <pre class="brush:php;toolbar:false;">사용자 유형 { 아이디: 아이디! 이름: 문자열 게시물: [게시물] } 게시물 {를 입력하세요. 아이디: 아이디! 제목: 문자열 작성자: 사용자 } 쿼리를 입력하세요. user(id: ID!) : 사용자 } const 해석기 = { 사용자: { 게시물(상위, 인수, 컨텍스트) { return context.db.Post.find({ 작성자: parent.id }); }, }, };</pre> <p>$lookup 단계는 동일한 데이터베이스의 다른 컬렉션에 대한 왼쪽 외부 조인을 수행하는 집계 파이프라인 단계입니다. $lookup 단계는 여러 컬렉션의 데이터를 단일 결과 세트로 병합하는 데 사용할 수 있습니다. 예를 들어, 다음과 같은 모델에 참여하는 데 사용할 수 있습니다. </p> <pre class="brush:php;toolbar:false;">db.posts .골재([ { $조회: { 보낸 사람: "사용자", localField: "작성자", foreignField: "_id", 다음과 같이: "저자", }, }, ]) .toArray((err, 게시물) => { console.log(게시물); });</pre> <p>지원서에 어떤 것을 사용해야 할지 잘 모르겠습니다. 저는 보다 효율적이고 확장 가능하며 유지 관리가 가능한 옵션을 선택하고 싶었습니다. </p> <p>Apollo GraphQL 해석기에서 상위 매개변수를 사용하는 것과 MongoDB 집계에서 $lookup 단계를 사용하여 Mongoose 모델을 조인하는 것 사이의 주요 차이점과 장단점은 무엇입니까? </p>
P粉543344381P粉543344381414일 전877

모든 응답(2)나는 대답할 것이다

  • P粉081360775

    P粉0813607752023-09-03 00:53:03

    첫 번째 기술을 추천합니다. 확실히 더 깨끗하고 아마도 더 빠릅니다. RDB에서 외래 키를 색인화하는 것과 마찬가지로 author 필드를 색인화해야 합니다.

    회신하다
    0
  • P粉676588738

    P粉6765887382023-09-03 00:41:40

    이 두 가지 방법에는 약간의 차이점이 있습니다

    파서 사용

    이 접근 방식이 더 직관적이고 읽기 쉬우므로 특히 복잡한 쿼리의 경우 유지 관리가 더 쉽습니다

    그러나 각 중첩 필드에 대해 데이터베이스를 추가로 호출하므로 대량의 데이터를 처리할 때 가장 효율적이지 않을 수 있습니다. 이는 다수의 복잡한 중첩 쿼리를 처리할 때 성능 병목 현상이 발생할 수 있습니다.

    $lookup 사용

    반면 $lookup 작업은 단일 데이터베이스 호출을 사용하여 데이터를 연결하고 검색하기 때문에 일반적으로 성능이 더 좋습니다.

    그러나 쿼리 복잡성이 증가함에 따라 $lookup 작업이 복잡해지고 읽고 유지 관리하기가 어려워질 수 있습니다. MongoDB 쿼리 언어에 대한 더 많은 지식이 필요할 수 있으며 파서 접근 방식만큼 간단하고 사용하기 쉽지 않을 수 있습니다. 잘못 작성된 집계는 성능 문제를 일으킬 수 있으므로 현재 수행 중인 작업을 확실히 확인하십시오.

    따라서 귀하의 예에서는 파서 접근 방식을 사용해도 괜찮습니다. 집계를 사용하는 것이 더 빠르더라도 첫 번째 접근 방식은 읽기/개선/유지 관리가 더 쉬울 것입니다.

    도움이 되길 바랍니다 :)

    회신하다
    0
  • 취소회신하다