Docs Menu
Docs Home
/
MongoDB Shell
/ /

EJSON.stringify()

이 페이지의 내용

  • 구문
  • 명령 필드
  • 행동
  • 예시
  • 출력 간격 변경
  • 출력 필드 선택
  • 함수를 사용하여 출력 필드 변환
  • 함수를 사용하여 중첩 객체의 출력 필드 변환
  • 함수를 사용하여 BSON 문자열 바꾸기
  • mongosh 내부에서 파일에 쓰기
  • 명령줄에서 실행
  • 출력 필드 필터링
  • Legacy tojsononeline()
  • 자세히 알아보기

EJSON.stringify() 메서드는 BSON 값을 문자열로 변환합니다.

EJSON.stringify() 메서드는 BSON 객체 를 입력으로 사용하고, 출력 string 의 형식을 제어하는 선택적 수정자를 사용합니다.

EJSON.stringify(BSON object, [replacer], [space], [options])

EJSON.stringify() 메서드에는 다음과 같은 필드가 있습니다.

필드
유형
필요성
설명
value
BSON 객체
필수 사항
객체 EJSON.stringify() 변환
replacer
배열 또는 함수
옵션

출력을 수정합니다. 값이 존재하지만 배열 이나 함수가 아닌 경우 EJSON.stringify() 은 모든 문서 필드를 반환합니다.

replacer 배열 또는 함수일 수 있습니다.

효과
배열
출력에 포함할 문서 필드의 배열 입니다. 배열 요소는 반환된 JSON string 에 포함할 필드 이름을 지정해야 합니다.
함수

두 개의 매개 변수 keyvalue 을 사용하는 함수입니다. key 는 함수의 this 컨텍스트를 제공합니다. EJSON은 변환된 value 를 반환합니다.

The function is run for each object. 객체 값은 함수의 반환 값으로 대체됩니다.

예시 는 함수를 사용하여 출력 필드 변환을 참조하세요.

spacer
정수 또는 문자열
옵션

출력의 간격을 제어합니다. spacer 옵션만 지정하려는 경우 nullreplacer 의 자리 표시자로 사용합니다.

효과
integer
각 레벨을 들여쓸 공백의 수입니다. 10 이 최대값입니다.
문자열
각 레벨을 들여쓰기하는 데 사용하는 문자입니다. 이 옵션은 공백이나 탭 이외의 문자를 사용하는 경우 유효하지 않은 JSON을 생성합니다. 자세한내용은 JSON.stringify() 를 참조하세요.
options
부울
옵션

추가 구성 옵션

옵션
기본값
의미
relaxed
true
확장 JSON 에 대해 완화 모드 를 활성화합니다. 해당되는 경우 BSON 유형 정보를 첨부하는 대신 네이티브 JSON 유형을 반환합니다.

대화형 mongosh 세션 내부에서 또는 --eval 을(를) 사용하여 시스템 명령줄 에서 EJSON 인터페이스를 호출할 수 있습니다.

대화형 세션에서 EJSON 인터페이스를 호출합니다.

EJSON.stringify( db.sales.find().toArray(), null, 2 )

다음과 같이 시스템 명령줄에서 EJSON 인터페이스를 호출합니다.

mongosh --eval "EJSON.stringify( db.sales.find().toArray(), null, 2 )"

문서가 EJSON으로 전달되는 방식을 제어하려면 mongosh 커서 메서드 이터레이터 중 하나를 사용하세요.

이터레이터
특성
차단, 전체 결과 버퍼링
비차단, 문서를 하나씩 인쇄
비차단, 결과 수동 반복

이러한 예제를 시도하려면 먼저 test 데이터베이스 에 sales 컬렉션 을 만듭니다.

db.sales.insertMany( [
{ custId: 345, purchaseDate: ISODate("2023-07-04"), quantity: 4, cost: Decimal128("100.60"), },
{ custId: 346, purchaseDate: ISODate("2023-07-12"), quantity: 3, cost: Decimal128("175.45"), },
{ custId: 486, purchaseDate: ISODate("2023-08-01"), quantity: 9, cost: Decimal128("200.53"), },
] )

수준 간 들여쓰기를 늘리려면 spacing 옵션을 설정하다 합니다.

EJSON.stringify( db.sales.findOne( { custId: 345 } ), null , 5 )

EJSON.stringify() 각 문서 를 5단계 공백으로 들여씁니다.

{
"_id": {
"$oid": "64da90c1175f5091debcab26"
},
"custId": 345,
"purchaseDate": {
"$date": "2023-07-04T00:00:00Z"
},
"quantity": 4,
"cost": {
"$numberDecimal": "100.60"
}
}

문서 필드의 하위 집합을 선택하려면 배열 을 사용하여 replace 옵션을 설정하다 합니다.

EJSON.stringify( db.sales.find().toArray(), [ "quantity", "cost" ] )

EJSON은 각 문서 의 quantitycost 서식을 지정합니다.

[{"quantity":4,"cost":{}},{"quantity":3,"cost":{}},{"quantity":9,"cost":{}}]

이 예시 에서는 spacing 옵션이 지정되지 않았으므로 EJSON은 선택한 필드를 한 줄에 반환합니다.

필드 값을 변환하려면 JavaScript 함수를 사용하여 replacer 옵션을 설정하다 합니다. 예를 예시 다음과 같습니다.

let queryResults = db.sales.find().toArray()
let replacer = function( key, value ){
if ( key === '_id' ) {
value = undefined;
}
if ( key === 'quantity' ) {
value = 2 * value;
}
return value;
}
EJSON.stringify( queryResults, replacer, 3 )

함수는 입력 객체 에 대해 재귀적으로 실행됩니다.

출력 예시:

[
{
"custId": 345,
"purchaseDate": {
"$date": "2023-07-04T00:00:00Z"
},
"quantity": 8,
"cost": {
"$numberDecimal": "100.60"
}
},
{
"custId": 346,
"purchaseDate": {
"$date": "2023-07-12T00:00:00Z"
},
"quantity": 6,
"cost": {
"$numberDecimal": "175.45"
}
},
{
"custId": 486,
"purchaseDate": {
"$date": "2023-08-01T00:00:00Z"
},
"quantity": 18,
"cost": {
"$numberDecimal": "200.53"
}
}
]

replacer 함수는 _idquantity 두 필드를 업데이트합니다.

EJSON.stringify() 는 정의되지 않은 값이 있는 필드를 무시하므로 _id: undefined 을 설정하면 출력 문자열에서 _id 필드가 제거됩니다.

이 함수는 출력 string 의 quantity 필드 도 수정합니다. 출력 string 에서 모든 quantity 값에 2를 곱합니다. EJSON.stringify() 는 컬렉션 을 업데이트 하지 않습니다.

중첩된 주소를 사용하여 salesWithAddress 컬렉션 을 만듭니다.

db.salesWithAddress.insertMany( [
{ custId: 345, purchaseDate: ISODate("2023-07-04"),
quantity: 4, cost: Decimal128("100.60"),
address: { number: 100, street: "Main Street", ZIP: 12345 } },
{ custId: 346, purchaseDate: ISODate("2023-07-12"),
quantity: 3, cost: Decimal128("175.45"),
address: { number: 200, street: "East Street", ZIP: 12345 } }
] )

다음 예시 에서는 replacer 함수를 사용하여 주소의 우편 번호를 55555 로 변경합니다.

// Retrieve the salesWithAddress contents as an array and save
// in queryResults
let queryResults = db.salesWithAddress.find().toArray()
// Define a replacer function to change the ZIP codes
let replacer = function( key, value ) {
if (key === 'address') {
value.ZIP = 55555;
}
return value;
}
// Run EJSON.stringify() to change the ZIP codes in queryResults
EJSON.stringify( queryResults, replacer, 3 )

출력 예시:

[
{
"_id": {
"$oid": "65498c6562f443aa1490070f"
},
"custId": 345,
"purchaseDate": {
"$date": "2023-07-04T00:00:00Z"
},
"quantity": 4,
"cost": {
"$numberDecimal": "100.60"
},
"address": {
"number": 100,
"street": "Main Street",
"ZIP": 55555
}
},
{
"_id": {
"$oid": "65498c6562f443aa14900710"
},
"custId": 346,
"purchaseDate": {
"$date": "2023-07-12T00:00:00Z"
},
"quantity": 3,
"cost": {
"$numberDecimal": "175.45"
},
"address": {
"number": 200,
"street": "East Street",
"ZIP": 55555
}
}
]

BSON 데이터 유형 목록과 해당 숫자 코드는 BSON types에서 확인 가능합니다.

다음 예시에서는 replacer 함수를 사용하여 BSON 문자열을 "This is a string"라는 문자열로 바꿉니다.

// Retrieve the salesWithAddress contents as an array and save
// in queryResults
let queryResults = db.salesWithAddress.find().toArray()
// Define a replacer function to replace the strings
let replacer = function( key, value ) {
if (typeof value === "string") {
return "This is a string";
}
return value;
}
// Run EJSON.stringify() to replace the strings in queryResults
EJSON.stringify( queryResults, replacer, 3 )

출력 예시:

[
{
"_id": {
"$oid": "This is a string"
},
"custId": 345,
"purchaseDate": {
"$date": "This is a string"
},
"quantity": 4,
"cost": {
"$numberDecimal": "This is a string"
},
"address": {
"number": 100,
"street": "This is a string",
"ZIP": 12345
}
},
{
"_id": {
"$oid": "This is a string"
},
"custId": 346,
"purchaseDate": {
"$date": "This is a string"
},
"quantity": 3,
"cost": {
"$numberDecimal": "This is a string"
},
"address": {
"number": 200,
"street": "This is a string",
"ZIP": 12345
}
}
]

mongosh 내에서 파일 에 쓰기 (write) 려면 fs API 를 사용합니다. EJSON.stringify() 를 사용하여 fs에 전달한 string 의 서식을 지정합니다.

const sales_2023_07 = db.sales.find(
{
purchaseDate:
{
$gte: ISODate( "2023-07-01" ),
$lte: ISODate( "2023-07-31" )
}
}
)
fs.writeFileSync(
'sales_2023_07.json',
EJSON.stringify( sales_2023_07.toArray(), null, 2 )
)

이 예시 에서는 2023 7월 판매에 대한 sales 컬렉션 을 쿼리합니다.

  • sales_2023_07 MongoDB BSON 객체 를 저장합니다.

  • EJSON.stringify() 객체 의 형식을 JSON string 로 지정합니다.

  • fs.writeFileSync() 형식이 지정된 문자열을 mongosh 실행한 디렉토리의 sales_2023_07.json 파일에 씁니다.

운영 체제 shell 에서 쿼리 를 실행 하려면 --eval 옵션을 사용합니다.

# Note: This example is formatted to fit on the page.
mongosh --quiet \
--eval "db.sales.find().forEach( \
o => print( EJSON.stringify( o ) ) )"

이 명령은 각 문서 에 대해 한 줄의 JSON 을 반환합니다.

  • --quiet mongosh 연결 정보를 표시하지 않습니다.

  • --eval find 메서드를 호출합니다.

  • .forEach mongosh 에 응답을 반복하도록 지시하는 JavaScript 메서드입니다.

  • EJSON.stringify() 각 문서 를 JSON 으로 변환합니다.

출력은 다음과 같습니다:

{"_id":{"$oid":"64da90c1175f5091debcab26"},"custId":345,"purchaseDate":{"$date":"2023-07-04T00:00:00Z"},"quantity":4,"cost":{"$numberDecimal":"100.60"}}
{"_id":{"$oid":"64da90c1175f5091debcab27"},"custId":346,"purchaseDate":{"$date":"2023-07-12T00:00:00Z"},"quantity":3,"cost":{"$numberDecimal":"175.45"}}
{"_id":{"$oid":"64da90c1175f5091debcab28"},"custId":486,"purchaseDate":{"$date":"2023-08-01T00:00:00Z"},"quantity":9,"cost":{"$numberDecimal":"200.53"}}

한 줄 출력 형식은 스크립팅에 편리합니다. EJSON.stringify() 은 또한 사람이 읽을 수 있는 서식을 생성할 수 있습니다.

# Note: This example is formatted to fit on the page.
mongosh --quiet \
--eval "db.sales.find().forEach( \
o => print( EJSON.stringify(o, null, 3 ) ) )"

출력은 다음과 같습니다:

# Note: This is only the first document.
{
"_id": {
"$oid": "64da90c1175f5091debcab26"
},
"custId": 345,
"purchaseDate": {
"$date": "2023-07-04T00:00:00Z"
},
"quantity": 4,
"cost": {
"$numberDecimal": "100.60"
}
}
  • o 은(는) .forEach() 을(를) 반복할 때마다 EJSON.stringify() 가 변환하는 BSON 값입니다.

  • null 선택 사항인 replacer 의 자리 표시자입니다. replacer 이(가) 없는 경우 EJSON.stringify() 는 정의된 값이 있는 모든 필드를 반환합니다.

  • 3 is the spacer value. EJSON.stringify() 에 각 새 레벨을 3칸씩 들여쓰기하도록 지시합니다.

출력 string 에 추가 유형 정보를 포함하려면 { relaxed: false } 옵션을 추가합니다.

# Note: This example is formatted to fit on the page.
mongosh --quiet \
--eval "db.sales.find().forEach( \
o => print( \
EJSON.stringify( o, null, 3, { relaxed: false } ) \
) )"

출력은 다음과 같습니다:

# Note: This is only the first document.
{
"_id": {
"$oid": "64da90c1175f5091debcab26"
},
"custId": {
"$numberInt": "345"
},
"purchaseDate": {
"$date": {
"$numberLong": "1688428800000"
}
},
"quantity": {
"$numberInt": "4"
},
"cost": {
"$numberDecimal": "100.60"
}
}

EJSON.stringify() jq 과 같은 추가 JSON 구문 분석기의 필요성을 줄이는 서식 지정 옵션을 제공합니다.

# Note: This example is formatted to fit on the page.
mongosh --quiet \
--eval "EJSON.stringify( \
db.sales.find( {}, \
{ _id: 0, custId: 1, quantity: 1 } ).toArray(), null, 2 \
);"

출력은 다음과 같습니다:

[
{
"custId": 345,
"quantity": 4
},
{
"custId": 346,
"quantity": 3
},
{
"custId": 486,
"quantity": 9
}
]

mongosh shell 은 레거시 mongo shell 과 다른 출력을 반환합니다. 레거시 mongo shell 과 유사한 방식으로 출력 형식을 지정해야 하는 스크립트가 있는 경우 EJSON.stringify()를 사용하여 mongosh 출력의 형식을 다시 지정해 보세요.

mongoshmongo 에서 샘플 쿼리 를 실행하여 다양한 형식을 확인합니다.

db.sales.find( { custId: 345 } )

레거시 출력:

{ "_id" : ObjectId("64da90c1175f5091debcab26"), "custId" : 345, "purchaseDate" : ISODate("2023-07-04T00:00:00Z"), "quantity" : 4, "cost" : NumberDecimal("100.60") }

mongosh 출력:

db.sales.find( { custId: 345 } )
[
{
_id: ObjectId("64da90c1175f5091debcab26"),
custId: 345,
purchaseDate: ISODate("2023-07-04T00:00:00.000Z"),
quantity: 4,
cost: Decimal128("100.60")
}
]

EJSON.stringify()(으)로 출력 형식을 다시 지정합니다.

EJSON.stringify( db.sales.find( { custId: 345 } ).toArray() )
[{"_id":{"$oid":"64da90c1175f5091debcab26"},"custId":345,"purchaseDate":{"$date":"2023-07-04T00:00:00Z"},"quantity":4,"cost":{"$numberDecimal":"100.60"}}]

돌아가기

serialize()