EJSON.stringify()
이 페이지의 내용
EJSON.stringify()
메서드는 BSON 값을 문자열로 변환합니다.
구문
EJSON.stringify()
메서드는 BSON 객체 를 입력으로 사용하고, 출력 string 의 형식을 제어하는 선택적 수정자를 사용합니다.
EJSON.stringify(BSON object, [replacer], [space], [options])
명령 필드
EJSON.stringify()
메서드에는 다음과 같은 필드가 있습니다.
필드 | 유형 | 필요성 | 설명 | ||||||
---|---|---|---|---|---|---|---|---|---|
| BSON 객체 | 필수 사항 | 객체 | ||||||
| 배열 또는 함수 | 옵션 | 출력을 수정합니다. 값이 존재하지만 배열 이나 함수가 아닌 경우
| ||||||
| 정수 또는 문자열 | 옵션 | 출력의 간격을 제어합니다.
| ||||||
| 부울 | 옵션 | 추가 구성 옵션
|
행동
대화형 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은 각 문서 의 quantity
및 cost
서식을 지정합니다.
[{"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
함수는 _id
및 quantity
두 필드를 업데이트합니다.
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 데이터 유형 목록과 해당 숫자 코드는 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 내부에서 파일에 쓰기
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 thespacer
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 } ]
Legacy tojsononeline()
mongosh
shell 은 레거시 mongo
shell 과 다른 출력을 반환합니다. 레거시 mongo
shell 과 유사한 방식으로 출력 형식을 지정해야 하는 스크립트가 있는 경우 EJSON.stringify()를 사용하여 mongosh
출력의 형식을 다시 지정해 보세요.
mongosh
및 mongo
에서 샘플 쿼리 를 실행하여 다양한 형식을 확인합니다.
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"}}]
자세히 알아보기
EJSON 문서화
Mozilla 개발자 네트워크 JSON.stringify() 문서화