English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MongoDB 데이터베이스 참조

MongoDB 관계의 마지막 장에서 볼 수 있듯이, MongoDB에서 규범화된 데이터베이스 구조를 구현하기 위해, 참조된 관계의 개념(수동 참조라고도 합니다)을 사용했습니다. 여기서 우리는 참조되는 문서의 id를 다른 문서에 수동으로 저장했습니다. 그러나 다른 컬렉션에서의 참조를 포함하는 문서가 있을 때, MongoDB에서 사용할 수 있습니다 DBRefs。

DBRef와 수동 참조

예제로, DBRef 대신 수동으로 참조하는 경우를 고려해 보겠습니다. 다양한 유형의 주소(가정, 사무실, 우편 등)를 다른 컬렉션(address_home, address_office, address_mailing 등)에 저장하는 데이터베이스를 사용합니다. 이제, user 컬렉션의 문서가 주소를 참조할 때, 주소 유형에 따라 검색할 컬렉션을 지정해야 합니다. 여러 컬렉션에 있는 문서를 참조하는 경우, DBRefs를 사용해야 합니다.

DBRef 사용

DBRefs에는 세 필드가 있습니다-

  • $ref − 이 필드는 참조되는 문서의 컬렉션을 지정합니다

  • $id − 이 필드는 참조되는 문서의 _id 필드를 지정합니다

  • $db − 이는 선택 사항이며, 참조되는 문서가 위치하는 데이터베이스의 이름을 포함합니다

DBRef 필드를 가진 예제 사용자 문서를 고려해 보겠습니다address코드 부분을 보면-

{
   "_id": ObjectId("53402597d852426020000002")
   "address": {
   "$ref": "address_home"
   "$id": "ObjectId("534009e4d852427820000002")
   "$db": "w"3codebox"
   "contact": ""987654321"
   "dob": "0"1-01-1991"
   "name": "Tom Benzamin"
}

여기의 주소 DBRef 필드는 참조되는 주소 문서가 w에 위치하도록 지정합니다3codebox 데이터베이스 아래의 address_home 컬렉션에서 id가534009e4d8524278200000002。

아래 코드는 $ref 매개변수(예: address_home)에 지정된 컬렉션에서 DBRef의 $id 매개변수에 지정된 id 문서를 검색합니다.

>var user = db.users.findOne({"name":"Tom Benzamin"})
>var dbRef = user.address
>db[dbRef.$ref].findOne({"_id":(dbRef.$id)})

위 코드는 다음과 같이 반환합니다address_home존재하는 주소 문서-

{
   "_id": ObjectId("534009e4d852427820000002")
   "building": ""22 A, Indiana Apt",
   "pincode": : 123456,
   "city": "Los Angeles",
   "state": "California"
}