AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

확장 JSON 데이터로 작업하기

이 가이드 에서는 MongoDB 문서와 상호 작용할 때 확장 JSON 데이터 형식을 사용하는 방법을 학습 수 있습니다.

JSON 객체, 배열, 숫자, 문자열, 부울 및 null 값을 나타내는 사람이 읽을 수 있는 데이터 형식입니다. 이 형식은 MongoDB 데이터를 저장 데 사용하는 형식인 BSON 데이터 유형의 하위 집합만 지원합니다. 확장 JSON 형식은 더 많은 BSON 유형을 지원하며, BSON 의 각 유형에 직접적으로 대응하는 필드 유형 정보를 나타내기 위해 '$' 접두사가 붙은 예약된 키 설정하다 를 정의합니다.

JSON, BSON 및 확장 JSON에 대해 자세히 학습하려면 JSON 및 BSON 리소스와 확장 JSON MongoDB Server 수동 항목을 참조하세요.

MongoDB 확장 JSON BSON 데이터를 나타내는 문자열 형식을 제공합니다. 각 형식은 JSON RFC 를 준수하며 특정 사용 사례를 충족합니다.

다음 표에서는 각 확장 JSON 형식에 대해 설명합니다.

이름
설명

확장 또는 표준

데이터 변환 중에 BSON 유형 정보의 손실을 방지하는 문자열 형식입니다.
이 형식은 사람의 가독성과 이전 형식과의 상호 운용성을 포기하고 유형 보존을 우선시합니다. 이 형식에 대해 자세히 학습 API 문서에서 JsonMode.EXTENDED를 참조하세요.

완화

일부 유형 정보가 손실된 BSON 문서를 설명하는 문자열 형식입니다.
이 형식은 특정 유형 정보가 손실될 경우 사람의 가독성과 상호 운용성을 우선시합니다. Java Reactive Streams 운전자 기본값 으로 완화 모드 사용합니다. 이 형식에 대해 자세히 학습 API 문서에서 JsonMode.RELAXED를 참조하세요.

Shell

MongoDB 셸 에서 사용되는 구문과 일치하는 문자열 형식입니다.
이 형식은 JavaScript 함수를 사용하여 유형을 나타내는 경우가 많은 MongoDB 셸 과의 호환성을 우선시합니다. 이 형식에 대해 자세히 학습 API 문서에서 JsonMode.SHELL을 참조하세요.

참고

Java Reactive Streams 운전자 문자열에서 확장 $uuid JSON 유형을 바이너리 BsonBinary 하위 유형 의 객체 로 구문 4 분석합니다.$uuid 필드 분석에 대한 자세한 내용은 확장 JSON 사양의 $uuid 필드 구문 분석을 위한 특별 규칙 섹션을 참조하세요.

다음 예시에서는 각 확장 JSON 형식으로 표시되는 ObjectId, 날짜, 긴 숫자 필드가 포함된 문서를 보여 줍니다. 원하는 형식의 예시 탭을 클릭합니다.

{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": { "$numberLong": "1601499609" }},
"numViews": { "$numberLong": "36520312" }
}
{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": "2020-09-30T18:22:51.648Z" },
"numViews": 36520312
}
{
"_id": ObjectId("573a1391f29313caabcd9637"),
"createdAt": ISODate("2020-09-30T18:22:51.648Z"),
"numViews": NumberLong("36520312")
}

이 섹션에서는 다음과 같은 방법으로 확장 JSON 값을 Java 객체로 읽는 방법을 보여줍니다.

Extended JSON string을 Java 문서 객체로 읽으려면 Document 또는 BsonDocument 클래스에서 parse() 정적 메서드를 호출합니다. 이 메서드는 Extended JSON string을 구문 분석하고 데이터를 지정된 문서 클래스의 인스턴스에 저장합니다.

다음 예시 에서는 parse() 메서드를 사용하여 확장 JSON 문자열을 Document 객체 로 읽습니다.

String ejsonStr = "{ \"_id\": { \"$oid\": \"507f1f77bcf86cd799439011\" },"
+ " \"myNumber\": { \"$numberLong\": \"4794261\" } }";
Document doc = Document.parse(ejsonStr);
System.out.println(doc);

문서 클래스를 사용하지 않고 확장 JSON 문자열을 Java 객체로 읽으려면 BSON 라이브러리의 JsonReader 클래스를 사용합니다. 이 클래스에는 확장 JSON 문자열의 필드와 값을 순차대로 구문 분석하고 이를 Java 객체로 반환하는 메서드가 포함되어 있습니다. 드라이버의 문서 클래스도 이 클래스를 사용하여 확장 JSON을 구문 분석합니다.

다음 코드는 JsonReader 클래스에서 제공하는 메서드를 사용하여 확장 JSON string을 Java 객체로 변환합니다.

String string = "{ \"_id\": { \"$oid\": \"507f1f77bcf86cd799439011\" },"
+ " \"myNumber\": { \"$numberLong\": \"4794261\" } }";
JsonReader jsonReader = new JsonReader(string);
jsonReader.readStartDocument();
// Reads the "_id" field value
jsonReader.readName("_id");
ObjectId id = jsonReader.readObjectId();
// Reads the "myNumber" field value
jsonReader.readName("myNumber");
long myNumber = jsonReader.readInt64();
jsonReader.readEndDocument();
System.out.println(id + " is type: " + id.getClass().getName());
System.out.println(myNumber + " is type: " + Long.class.getName());
jsonReader.close();

경고

JSON BSON 으로 변환하기 전에 신뢰할 수 없는 입력 유효성 검사하기

JSON 문자열을 BSON 으로 변환하고 결과 BSON 쿼리, 업데이트 또는 명령에 사용하는 경우 공격자가 연산자 또는 예기치 않은 필드 값을 삽입하여 연산의 의미를 변경할 수 있습니다. 이 위험은 JSON 이 사용자, API 요청 또는 신뢰할 수 없는 다른 소스에서 시작된 경우 가장 커집니다.

변환 전 입력 유효성 검사에 대해 자세히 학습 보려면 JSON BSON 으로 변환하기 전에 신뢰할 수 없는 입력 유효성 검사를 참조하세요.

이 섹션에서는 다음과 같은 방법으로 Java 객체에서 확장 JSON 값을 쓰기 (write) 방법을 보여줍니다.

Document 또는 BsonDocument 객체 에서 확장 JSON 문자열을 쓰기 (write) 하려면 toJson() 메서드를 호출합니다. 이 메서드에 JsonWriterSettings 객체 매개변수를 전달하여 확장 JSON 형식을 지정할 수 있습니다.

다음 예시 Document 데이터를 완화 모드 확장 JSON 으로 씁니다.

Document doc = new Document()
.append("_id", new ObjectId("507f1f77bcf86cd799439012"))
.append("createdAt", Date.from(Instant.ofEpochMilli(1601499609000L)))
.append("myNumber", 4794261);
JsonWriterSettings settings = JsonWriterSettings.builder()
.outputMode(JsonMode.RELAXED)
.build();
System.out.println(doc.toJson(settings));

Java 객체에 저장된 데이터에서 확장 JSON 문자열을 출력하려면 BSON 라이브러리의 JsonWriter 클래스를 사용할 수 있습니다. JsonWriter 객체를 구성하려면 Java Writer 의 서브클래스를 전달하여 확장 JSON을 출력할 방법을 지정합니다. 선택적으로 JsonWriterSettings 인스턴스를 전달하여 확장 JSON 형식과 같은 옵션을 지정할 수 있습니다. 기본적으로 JsonWriter 은(는) 완화 모드 형식을 사용합니다. BSON 문서 클래스도 이 클래스를 사용하여 BSON을 확장 JSON으로 변환합니다.

다음 예시 JsonWriter 객체 사용하여 표준 모드 확장 JSON 문자열 값을 생성하고 이를 System.out에 출력합니다.

JsonWriterSettings settings = JsonWriterSettings.builder()
.outputMode(JsonMode.EXTENDED)
.build();
JsonWriter jsonWriter = new JsonWriter(
new BufferedWriter(new OutputStreamWriter(System.out)), settings);
jsonWriter.writeStartDocument();
jsonWriter.writeName("_id");
jsonWriter.writeObjectId(new ObjectId("507f1f77bcf86cd799439012"));
jsonWriter.writeName("myNumber");
jsonWriter.writeInt64(11223344L);
jsonWriter.writeEndDocument();
jsonWriter.flush();

확장 JSON 출력 형식을 지정하는 것 외에도 JsonWriterSettings 객체 에 변환기를 추가하여 출력을 추가로 사용자 지정할 수 있습니다. 이러한 변환기 메서드는 변환 프로세스 중에 다양한 데이터 유형을 처리하기 위한 로직을 지정합니다.

다음 예시 문서 클래스 사용 예시 와 동일한 문서 변환합니다. 그러나 이 예시 objectIdConverter() dateTimeConverter() 객체 에 및 변환기 메서드를 JsonWriterSettings 정의하여 완화 모드 확장 JSON 출력을 간소화합니다.

JsonWriterSettings settings = JsonWriterSettings.builder()
.outputMode(JsonMode.RELAXED)
.objectIdConverter((value, writer) -> writer.writeString(value.toHexString()))
.dateTimeConverter((value, writer) -> {
ZonedDateTime zonedDateTime = Instant.ofEpochMilli(value).atZone(ZoneOffset.UTC);
writer.writeString(DateTimeFormatter.ISO_DATE_TIME.format(zonedDateTime));
})
.build();
Document doc = new Document()
.append("_id", new ObjectId("507f1f77bcf86cd799439012"))
.append("createdAt", Date.from(Instant.ofEpochMilli(1601499609000L)))
.append("myNumber", 4794261);
System.out.println(doc.toJson(settings));

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.