MongoDB 데이터 레코드를 BSON 문서로 저장합니다. BSON 추가 데이터 유형이 있는 JSON 문서의 바이너리 표현입니다. BSON 사양은 bsonspec.org 를 참조하세요.BSON types도 참조하세요.
문서 구조
문서는 필드-값 쌍으로 구성되며 다음과 같은 구조를 갖습니다.
{ field1: value1, field2: value2, field3: value3, ... fieldN: valueN }
필드의 값은 다른 문서, 배열 및 문서 배열을 포함한 모든 BSON 데이터 유형이 될 수 있습니다. 예를 들어 다음 문서에는 다양한 유형의 값이 포함되어 있습니다.
var mydoc = { _id: ObjectId("5099803df3f4948bd2f98391"), name: { first: "Alan", last: "Turing" }, birth: new Date('Jun 23, 1912'), death: new Date('Jun 07, 1954'), contribs: [ "Turing machine", "Turing test", "Turingery" ], views : Long(1250000) }
위의 필드에는 다음과 같은 데이터 유형이 있습니다.
_idObjectIdnamefirst및last필드가 포함된 내장된 문서를 보유합니다.birth날짜 유형의 값을death보유합니다.contribs문자열 배열viewsNumberLong 유형의 값을 보유합니다.
필드 이름
필드 이름은 특정 제한 사항 및 요구 사항이 있는 문자열입니다.
일반 제한 사항
필드 이름에 대한 일반적인 제한 사항은 다음과 같습니다.
필드 이름에는
null문자를 포함 할 수 없습니다.서버는 점(
.)과 달러 기호($)가 포함된 필드 이름의 저장을 허용합니다.MongoDB 5.0은 필드 이름에 (
$) 및 (.)를 사용에 대한 지원을 개선했습니다.몇 가지 제한 사항이 있습니다. 자세한 내용은 필드 이름 고려 사항을 참조하십시오.
고유성 요구 사항
필드 이름은 다음 고유성 기준을 충족해야 합니다.
각 필드 이름은 문서 내에서 고유해야 합니다. 문서에 중복 필드가 있는 경우 MongoDB CRUD 작업이 예기치 않게 작동할 수 있으므로 중복 필드가 있는 문서를 저장해서는 안 됩니다.
MongoDB 필드 이름이 중복된 문서 삽입을 지원 하지 않습니다. 일부 BSON 빌더 이러한 문서 생성을 지원 수 있지만, 삽입이 성공했거나 성공한 것처럼 보이더라도 MongoDB 해당 문서를 지원 하지 않습니다.
필드 이름이 중복된 문서의 업데이트는 업데이트 성공했거나 성공한 것처럼 보이더라도 지원되지 않습니다.
예시 를 들어, 필드 이름이 중복된 BSON 문서 MongoDB 운전자 통해 삽입하면 운전자 삽입 전에 중복 값을 조용히 삭제하거나 중복 필드가 포함된 유효하지 않은 문서 삽입될 수 있습니다. 이러한 문서를 쿼리하면 일관되지 않은 결과가 나타납니다.
MongoDB 부터 문서 6.1 중복된 필드 이름이 있는지 validate 확인하려면 full 필드 로 설정하다 상태에서 명령을 true 사용합니다. 모든 MongoDB 버전에서 $objectToArray 집계 연산자 사용하여 문서 중복된 필드 이름이 있는지 확인합니다.
참고
필드 와 관련된 제한 사항은 _id _id 필드를 참조하세요.
점 표기법
MongoDB 점 표기법 사용하여 배열 요소와 내장된 문서 필드에 액세스 .
배열
0부터 시작하는 인덱스 위치로 배열 요소를 지정하거나 액세스 하려면 점 표기법 사용하여 배열 이름과 0부터 시작하는 인덱스 위치를 연결하고 결과를 따옴표로 묶습니다.
"<array>.<index>"
예를 들어 문서에 다음과 같은 필드가 있다고 가정해 보겠습니다.
{ ... contribs: [ "Turing machine", "Turing test", "Turingery" ], ... }
contribs 배열 의 세 번째 요소를 지정하려면 "contribs.2"을 사용합니다.
배열을 쿼리하는 예시는 다음을 참조하세요.
팁
$[]업데이트 작업을 위한 모든 위치 연산자입니다,$[<identifier>]업데이트 작업을 위한 필터링된 위치 연산자입니다,$업데이트 작업을 위한 위치 연산자,$배열 인덱스 위치를 알 수 없는 경우의 프로젝션 연산자배열을 쿼리하여 배열이 있는 점 표기법 예시를 확인합니다.
내장된 문서
내장된 문서 의 필드 지정하거나 액세스 하려면 점 표기법 사용하여 내장된 문서 이름과 필드 이름을 연결하고 결과를 따옴표로 묶습니다.
"<embeddedDocument>.<field>"
예를 들어 문서에 다음과 같은 필드가 있다고 가정해 보겠습니다.
{ ... name: { first: "Alan", last: "Turing" }, contact: { phone: { type: "cell", number: "111-222-3333" } }, ... }
name에서last필드 지정하려면"name.last"를 사용합니다.중첩된
phone문서 에서number필드 지정하려면 다음을 사용합니다:"contact.phone.number".
경고
파티션 필드에는 점(.)이 포함된 필드 이름을 사용할 수 없습니다.
내장된 문서를 쿼리하는 예시는 다음을 참조하세요.
문서 제한
MongoDB 문서에는 쿼리 동작 및 애플리케이션 성능에 영향을 줄 수 있는 문서 크기 및 필드 순서와 같은 특정 속성이 있습니다.
문서 크기 제한
최대 BSON 문서 크기는 16 메비바이트입니다.
최대 문서 크기는 단일 문서 전송 중에 과도한 양의 RAM 이나 과도한 양의 대역폭을 사용할 수 없도록 하는 데 도움이 됩니다. 최대 크기보다 큰 문서를 저장 위해 MongoDB GridFS API 제공합니다. GridFS 에 대한 자세한 내용은 및 해당 mongofiles 운전자설명서를 참조하세요.
문서 필드 정렬
BSON 문서의 필드는 JavaScript 객체와 달리 순서가 지정됩니다.
쿼리 내 필드 순서
쿼리의 경우 필드 순서 동작은 다음과 같습니다.
문서를 비교할 때 필드 순서는 중요합니다. 예시 들면 다음과 같습니다.
{a: 1, b: 1}같음{a: 1, b: 1}{a: 1, b: 1}같지 않음{b: 1, a: 1}
쿼리 엔진 효율적인 실행을 위해 필드를 재정렬할 수 있습니다. 필드 재정렬은 중간 및 최종 쿼리 결과에서 발생할 수 있으며 다음 프로젝션 연산자를 사용하여 발생할 수 있습니다.
중요
일부 작업은 필드의 순서를 변경할 수 있으므로 위의 프로젝션 연산자를 사용하는 쿼리의 결과에서 특정 필드 순서에 의존하지 마세요.
쓰기 작업의 필드 순서
쓰기 조작의 경우 MongoDB는 다음과 같은 경우를 제외하고 문서 필드의 순서를 유지합니다.
_id필드는 항상 문서에서 첫 번째 필드입니다.renaming개의 필드 이름이 포함된 업데이트는 문서에서 필드의 순서를 변경할 수 있습니다.
필드 _id
MongoDB 에서 표준 컬렉션 에 저장된 각 문서 기본 키 역할을 하는 고유한 _id 필드 필요합니다. 삽입된 문서 _id 필드 생략된 경우, MongoDB 운전자 필드 _id 에 대한 ObjectId를 자동으로 생성합니다.
이는 upsert: true를 사용하여 업데이트 작업을 통해 삽입된 문서에도 적용됩니다.
참고
Time Series 컬렉션에서는 MongoDB 필드 에 인덱스 생성하지 않기 때문에 문서에 고유한 _id 필드 필요하지 _id 않습니다.
동작 및 제약 조건:
컬렉션 만들 때 MongoDB 기본값 으로
_id에 고유 인덱스 만듭니다._id필드 는 항상 문서 의 첫 번째 필드 입니다. 서버_id필드 없는 문서 먼저 수신하면 필드 문서 의 시작 부분으로 이동합니다._id하위 필드 이름은 ($) 기호로 시작할 수 없습니다.필드 배열 , 정규식
_id또는 정의되지 않음을 제외한 모든 BSON 데이터 유형 포함될 수 있습니다.
일반적인 _id 값 옵션:
다음은 _id 필드 의 값을 저장하는 일반적인 옵션입니다.
ObjectId를 사용합니다.
가능한 경우 자연 고유 식별자를 사용합니다. 이렇게 하면 공간이 절약되고 추가 인덱스가 필요하지 않습니다.
자동 증가 숫자를 생성합니다.
컬렉션 및
_id인덱스 에 효율적인 UUID 저장 위해 UUID를 BSONBinData유형으로 생성합니다.BinData유형의 인덱스 키는 다음과 같은 경우 인덱스에 더 효율적으로 저장됩니다.이진 하위 유형 값은 0~7 또는 128~135 범위 내에 있습니다.
바이트 배열의 길이는 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24 또는 32입니다.
드라이버의 BSON UUID 기능을 사용하여 UUID를 생성합니다. 드라이버 구현에서는 UUID 직렬화 및 역직렬화 로직을 다르게 구현할 수 있으며, 이는 다른 드라이버와 완전히 호환되지 않을 수 있습니다. UUID 상호 운용성에 관한 자세한 내용은 드라이버 설명서를 참조하세요.
참고
대부분의 MongoDB 드라이버 클라이언트는 _id 필드를 포함하고 MongoDB에 삽입 작업을 보내기 전에 ObjectId를 생성합니다. 하지만 클라이언트가 _id 필드 없이 문서를 보내면 mongod는 _id 필드를 추가하고 ObjectId를 생성합니다.
문서 구조의 다른 용도
데이터 레코드를 정의하는 것 외에도 MongoDB 쿼리 및 데이터 조작 작업을 포함한 여러 다른 컨텍스트에서 문서 구조를 사용합니다.
쿼리 필터 문서
쿼리 필터하다 문서는 읽기, 업데이트 및 삭제 작업에 대한 조건을 지정합니다.
<field>:<value> 표현식을 사용하여 같음 조건과 쿼리 연산자 표현식을 지정할 수 있습니다.
{ <field1>: <value1>, <field2>: { <operator>: <value> }, ... }
예를 들면 다음과 같습니다.
업데이트 사양 문서
업데이트 연산자를 사용하여 필드 수정을 지정할 수 있습니다.
{ <operator1>: { <field1>: <value1>, ... }, <operator2>: { <field2>: <value2>, ... }, ... }
인덱스 사양 문서
인덱스 사양 문서는 인덱스 할 필드와 해당 유형을 정의합니다.
{ <field1>: <type1>, <field2>: <type2>, ... }