문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

데이터베이스 참조

이 페이지의 내용

  • 수동 참조
  • 배경
  • MongoDB Atlas UI에서 수동 참조 만들기
  • 터미널에서 수동 참조 생성
  • 다음을 사용하세요.
  • DBRefs
  • 배경
  • 형식
  • DBRef용 드라이버 지원
  • 다음을 사용하세요.

MongoDB의 많은 사용 사례에서 관련 데이터가 단일 문서 내에 저장되는 비정규화된 데이터 모델이 최적입니다. 그러나 경우에 따라서는 관련 정보를 별도의 문서, 일반적으로 서로 다른 컬렉션이나 데이터베이스에 저장하는 것이 합리적일 수 있습니다.

중요

이 페이지에서는 $lookup$graphLookup 파이프라인 단계 이전의 대체 절차에 대해 설명합니다.

다음 환경에서 호스팅되는 배포에 대한 데이터베이스 참조를 생성할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

MongoDB 애플리케이션은 두 가지 방법 중 하나를 사용하여 문서를 연관시킵니다.

  • 수동 참조 는 한 문서의 _id 필드를 다른 문서에 참조로 저장합니다. 애플리케이션에서 두 번째 쿼리를 실행하여 관련 데이터를 반환합니다. 이러한 참조는 간단하고 대부분의 사용 사례에 충분합니다.

  • DBRef 는 첫 번째 문서의 _id 필드 값, 컬렉션 이름, 해당 데이터베이스 이름(선택 사항) 및 기타 필드를 사용하여 한 문서에서 다른 문서로 참조하는 것입니다. DBRefs를 사용하면 여러 컬렉션이나 데이터베이스에 저장된 문서를 더 쉽게 참조할 수 있습니다.

DBRef를 해결하려면 애플리케이션에서 추가 쿼리를 수행하여 참조된 문서를 반환해야 합니다. 일부 MongoDB 드라이버 는 DBRef를 문서로 해석할 수 있도록 헬퍼 메서드를 제공하지만 자동으로 수행되지는 않습니다.

DBRef는 문서 간의 관계를 나타내는 공통 형식과 유형을 제공합니다. 데이터베이스가 여러 프레임워크 및 도구와 상호 작용해야 하는 경우 DBRef 형식은 문서 간의 연결을 표시하는 공통의 시맨틱도 제공합니다.

DBRef를 사용해야 할 특별한 이유가 없다면 대신 수동 참조를 사용하세요.

수동 참조는 한 문서_id 필드를 다른 문서에 포함하는 관행입니다. 그런 다음 애플리케이션은 필요에 따라 참조된 필드를 확인하기 위해 두 번째 쿼리를 실행할 수 있습니다.

MongoDB Atlas UI에서 수동 참조를 만들려면 다음 단계를 따르세요.

1
  1. MongoDB Atlas UI의 Database 사이드바에서 버튼을 클릭합니다.

  2. 데이터베이스 배포에 데이터베이스 참조를 추가하려는 경우 Browse Collections를 클릭합니다.

  3. 왼쪽 탐색 창에서 데이터베이스를 선택합니다.

  4. 왼쪽 탐색 창에서 컬렉션을 선택합니다. 이 예에서는 places 컬렉션을 참고합니다.

2
  1. Insert Document를 클릭합니다.

  2. JSON 뷰 아이콘({{}})을 클릭합니다.

  3. 다음 데이터를 문서에 붙여넣습니다.

    {
    "_id": {
    "$oid": "651aea5870299b120736f442"
    },
    "name": "Broadway Center",
    "url": "bc.example.net"
    }
  4. Insert를 클릭합니다.

3
  1. 왼쪽 탐색 창에서 다른 컬렉션을 선택합니다. 이 예에서는 people 컬렉션을 참조합니다.

  2. Insert Document를 클릭합니다.

  3. JSON 뷰 아이콘({{}})을 클릭합니다.

  4. 다음 데이터를 문서에 붙여넣습니다.

    {
    "_id": {
    "$oid": "651aebeb70299b120736f443"
    },
    "name": "Erin",
    "places_id": "651aea5870299b120736f442"
    "url": "bc.example.net/Erin"
    }
  5. Insert를 클릭합니다.

    쿼리가 people 컬렉션에서 문서를 반환할 때 필요한 경우 places_id 필드가 참조하는 문서에 대한 places 컬렉션의 쿼리 결과를 필터링할 수 있습니다.

    MongoDB Atlas에서 쿼리를 실행하는 방법에 대해 자세히 알아보려면 MongoDB Atlas 설명서에서 문서 보기, 필터링 및 정렬을 참조하세요.

첫 번째 문서의 _id 필드를 두 번째 문서의 참조로 사용하여 두 문서를 삽입하려면 다음 작업을 고려하세요.

original_id = ObjectId()
db.places.insertOne({
"_id": original_id,
"name": "Broadway Center",
"url": "bc.example.net"
})
db.people.insertOne({
"name": "Erin",
"places_id": original_id,
"url": "bc.example.net/Erin"
})

그런 다음 쿼리가 people collection에서 문서를 반환하면 필요한 경우 places collection의 places_id 필드에서 참조하는 문서에 대해 두 번째 쿼리를 만들 수 있습니다.

두 문서 간의 관계를 저장하려는 거의 모든 경우에 수동 참조 를 사용합니다. 참조는 생성하기 간단하며 애플리케이션은 필요에 따라 참조를 확인할 수 있습니다.

수동 연결의 유일한 제한 사항은 이러한 참조가 데이터베이스 및 컬렉션 이름을 전달하지 않는다는 것입니다. 둘 이상의 컬렉션에 있는 문서와 관련된 단일 컬렉션 문서가 있는 경우 DBRefs 사용을 고려해야 할 수 있습니다.

DBRef는 특정 참조 유형이 아닌 문서를 나타내기 위한 규칙입니다. 여기에는 _id 필드의 값 외에도 컬렉션 이름, 경우에 따라 데이터베이스 이름이 포함됩니다.

선택적으로 DBRef에는 다른 필드를 얼마든지 포함할 수 있습니다. 추가 필드 이름은 서버 버전에서 지정한 필드 이름 규칙을 따라야 합니다.

DBRef에는 다음과 같은 필드가 있습니다:

$ref

$ref 필드에는 참조된 문서가 있는 컬렉션의 이름이 있습니다.

$id

$id 필드에는 참조된 문서의 _id 필드 값이 포함되어 있습니다.

$db

선택 사항.

참조된 문서가 있는 데이터베이스의 이름을 포함합니다.

예제

DBRef 문서는 다음 문서와 유사합니다.

{ "$ref" : <value>, "$id" : <value>, "$db" : <value> }

creator 필드에 DBRef를 저장한 collection의 문서를 예로 들어 보겠습니다.

{
"_id" : ObjectId("5126bbf64aed4daf9e2ab771"),
// .. application fields
"creator" : {
"$ref" : "creators",
"$id" : ObjectId("5126bc054aed4daf9e2ab772"),
"$db" : "users",
"extraField" : "anything"
}
}

이 예시의 DBRef는 _id 필드에 ObjectId("5126bc054aed4daf9e2ab772")가 있는 users 데이터베이스의 creators 컬렉션에 있는 문서를 가리킵니다. 선택 사항 필드도 포함되어 있습니다.

참고

DBRef의 필드 순서는 중요하며 DBRef를 사용할 때는 위의 시퀀스를 사용해야 합니다.

드라이버
DBRef 지원
참고 사항
C
지원되지 않음
참조를 수동으로 순회할 수 있습니다.
C++
지원되지 않음
참조를 수동으로 순회할 수 있습니다.
C#
지원됨
자세한 내용은 C# 드라이버 페이지 를 참조하세요.
Go
지원되지 않음
참조를 수동으로 순회할 수 있습니다.
하스켈
지원되지 않음
참조를 수동으로 순회할 수 있습니다.
Java
지원됨
자세한 내용은 Java 드라이버 페이지 를 참조하세요.
Node.js
지원됨
자세한 내용은 Node.js 드라이버 페이지 를 참조하세요.
Perl
지원됨
자세한 내용은 Perl 드라이버 페이지 를 참조하세요.
PHP
지원되지 않음
참조를 수동으로 순회할 수 있습니다.
Python
지원됨
자세한 내용은 PyMongo 드라이버 페이지 를 참조하세요.
Ruby
지원됨
자세한 내용은 Ruby 드라이버 페이지 를 참조하세요.
Scala
지원되지 않음
참조를 수동으로 순회할 수 있습니다.

대부분의 경우 두 개 이상의 관련 문서를 연결하려면 수동 참조 방법을 사용해야 합니다. 그러나 여러 컬렉션의 문서를 참조해야 하는 경우 DBRef를 사용하는 것이 좋습니다.

← 데이터 모델 참조
복제 →