>기술 주변기기 >IT산업 >MongoDB NOSQL 데이터베이스에서 조인을 사용합니다

MongoDB NOSQL 데이터베이스에서 조인을 사용합니다

William Shakespeare
William Shakespeare원래의
2025-02-18 12:59:14467검색

Using JOINs in MongoDB NoSQL Databases

코어 포인트

NOSQL 데이터베이스 인 MongoDB는 버전 3.2에서 새로운

운영자를 도입하여 두 세트 이상의 세트에서 왼쪽 결합과 유사한 작업을 수행하여 관계 데이터베이스와 유사한 데이터를 달성 할 수 있습니다. 그러나이 연산자는 집계 작업에 사용되는 것으로 제한되며, 이는 간단한 조회 쿼리보다 더 복잡하고 일반적으로 느리게됩니다.
    MongoDB의 연산자는 4 개의 매개 변수가 필요합니다 : $lookup (문서의 검색 필드를 입력), (연결할 수있는 컬렉션), () 및
  • (출력 필드의 이름). 이 연산자는 포스트를 일치시키기 위해 집계 쿼리에서 사용하고 순서대로 정렬하고 항목 수를 제한하며 사용자 데이터를 연결하고 사용자 배열을 평평하게하고 필요한 필드 만 반환 할 수 있습니다. $lookup MongoDB의 localField 운영자는 유용하고 NOSQL 데이터베이스에서 소량의 관계형 데이터를 관리하는 데 도움이 될 수 있지만 SQL의보다 강력한 조인 조항을 대체하는 것은 아닙니다. MongoDB에서 사용자 문서가 삭제되면 Orphan 게시물 문서가 유지되어 제약 조건이 부족합니다. 따라서 운영자가 자주 사용되는 경우 잘못된 데이터 저장소가 사용되며 관계형 (SQL) 데이터베이스가 더 적합 할 수 있음을 나타낼 수 있습니다. from foreignField from as 동료 검토 도움에 대한 Julian Motz에게 감사드립니다.
  • SQL과 NOSQL 데이터베이스의 가장 큰 차이점 중 하나는 조인입니다. 관계형 데이터베이스에서 SQL Join 조항을 사용하면 공통 필드를 사용하여 두 개 이상의 테이블에서 행을 결합 할 수 있습니다. 예를 들어, 책과 출판사 테이블이있는 경우 다음 SQL 명령을 작성할 수 있습니다. $lookup 다시 말해서, 책 테이블에는 게시자 테이블에서 ID 필드를 참조하는 Publisher_ID 필드가 있습니다. $lookup 이것은 단일 출판사가 수천 권의 책을 제공 할 수 있기 때문에 실용적입니다. 앞으로 게시자의 세부 정보를 업데이트 해야하는 경우 개별 레코드를 변경할 수 있습니다. 각 책에 대한 게시자의 정보를 반복 할 필요가 없기 때문에 데이터 중복성이 최소화됩니다. 이 기술을 표준화라고합니다.
  • SQL 데이터베이스는 관계 유지를 보장하기 위해 다양한 표준화 및 제약 조건을 제공합니다.
noSQL == 가입 없습니까?

Using JOINs in MongoDB NoSQL Databases 이것은 항상 그런 것은 아닙니다… 문서 지향 데이터베이스 (예 : MongoDB)는 정규화되지 않은 데이터를 저장하도록 설계되었습니다. 이상적으로는 세트간에 관계가 없어야합니다. 동일한 데이터가 둘 이상의 문서에 있어야하는 경우 반복해야합니다. 이것은 가 관계형 데이터가 필요없는 상황이 거의 없기 때문에 실망 스러울 수 있습니다. 다행스럽게도 Mongodb 3.2는 왼쪽 오우터-결합과 같은 작업을 둘 이상의 세트에서 수행 할 수있는 새로운

연산자를 소개했습니다. 그러나 문제가 있습니다 ...
mongodb 집계

집계 작업에서만 사용할 수 있습니다. 그것을 쿼리, 필터 및 그룹 결과로하는 일련의 연산자의 파이프 라인으로 생각하십시오. 한 연산자의 출력은 다음 연산자에 대한 입력으로 사용됩니다.

집계는 간단한 조회 쿼리보다 이해하기 어렵고 일반적으로 느리게 실행됩니다. 그러나 그들은 강력하고 복잡한 검색 작업에 유용한 옵션입니다.

집계를 설명하기 위해 예제를 사용하는 것이 가장 좋습니다. 사용자 모음이있는 소셜 미디어 플랫폼을 만들고 있다고 가정 해 봅시다. 각 사용자의 세부 사항을 별도의 문서에 저장합니다. 예를 들면 : $lookup

우리는 원하는만큼 많은 필드를 추가 할 수 있지만 모든 MongoDB 문서에는 고유 한 값을 가진

필드가 필요합니다. SQL 기본 키와 유사하게 필요한 경우 자동으로 삽입됩니다.

우리의 소셜 네트워크에는 이제 사용자의 많은 통찰력있는 업데이트를 저장하는 게시물 모음이 필요합니다. 문서는

필드에 작성한 사용자에 대한 텍스트, 날짜, 등급 및 참조를 저장합니다.

이제 우리는 이제 모든 사용자가 "중요한"으로 평가 한 마지막 20 개의 게시물을 역 순서대로 표시하려고합니다. 반환 된 각 문서에는 텍스트, 게시물 시간 및 관련 사용자의 이름 및 국가가 포함되어야합니다.
<code class="language-sql">SELECT book.title, publisher.name
FROM book
LEFT JOIN book.publisher_id ON publisher.id;</code>
MongoDB Aggregation Query는 각 작업을 순서대로 정의하는 다양한 파이프 라인 연산자를 통과합니다. 먼저

필터를 사용하여 게시물 컬렉션에서 올바른 등급을 가진 모든 문서를 추출해야합니다. _id 이제 우리는 _id 연산자를 사용하여 일치하는 항목을 역 순서로 정렬해야합니다.

우리는 20 개의 게시물 만 필요하기 때문에 MongoDB가 원하는 데이터 만 처리하면

단계를 적용 할 수 있습니다. user_id 이제 새로운 운영자를 사용하여 사용자 컬렉션의 데이터를 연결할 수 있습니다. 4 개의 매개 변수가있는 객체가 필요합니다

<code class="language-json">{
  "_id": ObjectID("45b83bda421238c76f5c1969"),
  "name": "User One",
  "email": "userone@email.com",
  "country": "UK",
  "dob": ISODate("1999-09-13T00:00:00.000Z")
}</code>
: 문서 에 검색 필드를 입력하십시오 : 컬렉션을 연결할 : 컬렉션

에서 발견 된 필드 : 출력 필드의 이름. $match

따라서 따라서 우리의 운영자는 다음과 같습니다
<code class="language-json">{
  "_id": ObjectID("17c9812acff9ac0bba018cc1"),
  "user_id": ObjectID("45b83bda421238c76f5c1969"),
  "date": ISODate("2016-09-05T03:05:00.123Z"),
  "text": "My life story so far",
  "rating": "important"
}</code>
이것은 라는 출력에 새로운 필드를 생성합니다. 각 값이 사용자 문서와 일치하는 배열이 포함되어 있습니다.

우리는 일대일 관계가 있습니다 $sort

는 게시물이 한 명의 저자 만 가질 수 있기 때문입니다. 따라서 우리의
<code class="language-javascript">{ "$match": { "rating": "important" } }</code>
배열에는 항상 하나의 항목 만 포함됩니다. 우리는 연산자를 사용하여 하위 문서로 분해 할 수 있습니다.

출력은 이제보다 실용적인 형식으로 변환되며 다른 운영자는 다음과 같이 적용 할 수 있습니다. $limit 마지막으로, 파이프 라인의

스테이지를 사용하여 텍스트, 게시물, 사용자 이름 및 국가를 반환 할 수 있습니다 :
<code class="language-sql">SELECT book.title, publisher.name
FROM book
LEFT JOIN book.publisher_id ON publisher.id;</code>
모든 것을합시다 최종 집계 쿼리는 게시물, 정렬 순서, 최신 20 개 항목에 대한 제한, 사용자 데이터를 연결하고 사용자 배열을 평평하게하며 필요한 필드 만 반환합니다. 완전한 명령 :

결과는 최대 20 개의 문서 모음입니다. 예를 들면 :

<code class="language-json">{
  "_id": ObjectID("45b83bda421238c76f5c1969"),
  "name": "User One",
  "email": "userone@email.com",
  "country": "UK",
  "dob": ISODate("1999-09-13T00:00:00.000Z")
}</code>
대단해! 마침내 NOSQL로 전환 할 수 있습니다!

mongodb

는 유용하고 강력하지만이 기본 예에도 복잡한 집계 쿼리가 필요합니다. SQL에서 더 강력한 조인 절을 대체 할 수는 없습니다. MongoDB는 또한 제약 조건을 제공하지 않습니다.
<code class="language-json">{
  "_id": ObjectID("17c9812acff9ac0bba018cc1"),
  "user_id": ObjectID("45b83bda421238c76f5c1969"),
  "date": ISODate("2016-09-05T03:05:00.123Z"),
  "text": "My life story so far",
  "rating": "important"
}</code>
이상적으로는

운영자는 거의 필요하지 않아야합니다. 자주 필요하면 잘못된 데이터 저장소를 사용했을 수 있습니다 ...

관계형 데이터가있는 경우 관계형 (SQL) 데이터베이스를 사용하십시오! $lookup

, 즉,

는 Mongodb 3.2에 인기있는 추가 기능입니다. NOSQL 데이터베이스에서 소량의 관계형 데이터를 사용할 때 더 실망스러운 문제를 극복합니다. $lookup MongoDB NOSQL 데이터베이스 (FAQ) 에서 조인 사용에 대한 FAQ SQL 연결과 MongoDB 연결의 차이점은 무엇입니까?

SQL 데이터베이스에서 연결 작업은 그 사이에 관련된 열을 기반으로 두 개 이상의 테이블의 행을 결합합니다. 그러나 NOSQL 데이터베이스로서 MongoDB는 기존의 SQL 연결을 지원하지 않습니다. 대신, MongoDB는 유사한 작업을 수행하는 두 가지 방법을 제공합니다 : 단계와 스테이지는 집계입니다. 이 방법을 사용하면 여러 컬렉션의 데이터를 단일 결과 세트로 결합 할 수 있습니다.
MongoDB의

단계는 어떻게 작동합니까?

MongoDB의

단계를 사용하면 다른 컬렉션 ( "Connected"컬렉션)에서 문서를 연결하고 연결된 문서를 입력 문서에 추가 할 수 있습니다. 단계는 문서와 일치하도록 ""Collection ","Localfield "및"Outisefield "와 문서를 출력하기위한"AS "필드를 지정합니다. SQL의 왼쪽 외부 조인과 유사하며 입력 수집에서 모든 문서를 반환하고 "From"컬렉션의 문서를 일치시킵니다. $lookup MongoDB 연결을 사용하여 재귀 검색을 수행 할 수 있습니까?

예, Mongodb는 재귀 검색을위한

단계를 제공합니다.

스테이지는 지정된 세트에서 재귀 검색을 수행하며 검색의 깊이와 폭을 제한하도록 선택할 수 있습니다. 레벨 수를 알 수 없거나 변경 될 수있는 계층 적 데이터 또는 그래프를 쿼리하는 데 유용합니다.

MongoDB 연결을 사용할 때 성능을 최적화하는 방법은 무엇입니까?

MongoDB 연결을 사용할 때 성능을 최적화하려면 다음과 같은 전략을 고려하십시오 🎜> 스테이지 및

스테이지를 필터링하고 문서를 변환합니다. $lookup MongoDB에서 여러 컬렉션을 연결할 수 있습니까?

예, 골재 파이프 라인에서 여러

스테이지를 연결하여 여러 MongoDB 컬렉션을 연결할 수 있습니다. 각 단계는 다른 컬렉션의 연결된 문서를 입력 문서에 추가합니다.

MongoDB 연결을 사용할 때 NULL 또는 결 측값을 처리하는 방법은 무엇입니까? $lookup MongoDB 연결을 사용할 때 입력 컬렉션의 문서가 "From"컬렉션의 문서와 일치하지 않으면 위상은 빈 배열을 "AS"필드에 추가합니다. "필드"로 문서를 필드로 필터링하기 위해 위상 후 위상을 추가하여 이러한 NULL 또는 결 측값을 처리 할 수 ​​있습니다. $lookup 샤드 컬렉션과 mongodb 연결을 사용할 수 있습니까?

Mongodb 3.6에서 시작하여

스테이지는 샤드 세트를 "From"세트로 받아 들일 수 있습니다. 그러나 추가 네트워크 오버 헤드로 인해 성능이 비 쉐이브 컬렉션만큼 좋지 않을 수 있습니다.

MongoDB에서 연결된 문서를 정렬하는 방법은 무엇입니까? $lookup 골재 파이프 라인에서 위상 후 $lookup 위상을 추가하여 MongoDB에서 연결된 문서를 정렬 할 수 있습니다. 단계는 지정된 필드의 문서를 오름차순 또는 내림차순으로 정렬합니다. $match 메소드와 함께 MongoDB 연결을 사용할 수 있습니까?

아니요, MongoDB 연결은

메소드와 함께 사용할 수 없습니다. 및

스테이지는

메소드보다 고급 데이터 처리 기능을 제공하는 집계 프레임 워크의 일부입니다. $lookup MongoDB 연결 실패를 디버그하거나 문제 해결하는 방법은 무엇입니까? $graphLookup MongoDB 연결 고장을 디버그하거나 문제 해결하려면 메소드를 사용하여 집계 파이프 라인의 실행 계획을 분석 할 수 있습니다.

방법은 처리 된 문서 수, 소비 된 시간 및 인덱스 사용을 포함하여 단계에 대한 자세한 정보를 제공합니다.

위 내용은 MongoDB NOSQL 데이터베이스에서 조인을 사용합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.