mongodb가 strict JSON을 출력하도록 강제합니다.
JSON을 사용하는 다른 프로그램에서 일부 MongoDB 명령어의 원시 출력을 소비하고 싶습니다.mongo 쉘에서 명령을 실행하면 다음과 같은 특수 필드가 있는 "쉘 모드" 필드인 Extended JSON을 나타냅니다.NumberLong,Date,그리고.Timestamp설명서에서 "strict 모드"에 대한 참조는 있지만 셸에 대해 이 모드를 켜거나 다음과 같은 명령을 실행하는 방법은 보이지 않습니다.db.serverStatus()엄밀한 JSON을 출력하는 것, 예를 들어mongodumpMongo에게 규격에 준거한 JSON을 출력하도록 강제하려면 어떻게 해야 합니까?
이 주제에 대해 몇 가지 다른 질문들이 있지만, 나는 그들의 어떤 대답도 특별히 만족스럽다고 생각하지 않는다.
MongoDB 쉘은 Javascript를 사용하므로 답은 간단합니다.JSON.stringify()명령어가 다음과 같은 경우db.serverStatus()다음 작업을 간단하게 수행할 수 있습니다.
JSON.stringify(db.serverStatus())
각 필드의 적절한 "엄격한 모드" 표현은 출력되지 않습니다({ "floatApprox": <number> }대신{ "$numberLong": "<number>" }그러나 표준 규격에 준거한 JSON을 도입하는 것에 관심이 있다면, 이것으로 충분합니다.
mongo 쉘에서 이 작업을 수행할 방법을 찾지 못했습니다. 하지만 해결 방법으로는,mongoexport는 쿼리를 실행할 수 있으며, 그 출력은 엄밀한 모드를 사용하여 JSON 입력을 상정하는 다른 명령어로 파이핑할 수 있습니다(예를 들어,json_pp또는jq예를 들어 쿼리를 실행하기 위한 다음 mongo shell 명령어가 있고 해당 데이터를 사용하여 파이프라인을 작성한다고 가정합니다.
db.myItemsCollection.find({creationDate: {$gte: ISODate("2016-09-29")}}).pretty()
이 mongo shell 명령어를 다음 shell 명령어로 변환하여 예를 들어 json_pp:
mongoexport --jsonArray -d myDbName -c myItemsCollection -q '{"creationDate": {"$gte": {"$date": "2016-09-29T00:00Z"}}}' | json_pp
쿼리를 엄밀한 모드 형식으로 변환하고 데이터베이스 이름과 컬렉션 이름을 인수로 전달할 뿐만 아니라 셸에 적절한 따옴표를 붙여야 합니다.
findOne의 경우
JSON.stringify(db.Bill.findOne({'a': '123'}))
커서가 있는 경우
db.Bill.find({'a': '123'}).forEach(r=>print(JSON.stringify(r)))
또는
print('[') + db.Bill.find().limit(2).forEach(r=>print(JSON.stringify(r) + ',')) + print(']')
will 출력
[{a:123},{a:234},]
마지막 항목은 ', 마지막 항목 뒤에...그것을 제거하다
@jbyler의 답변을 바탕으로 데이터를 취득한 후 sed를 사용하여 numberLongs를 삭제할 수 있습니다(Linux를 사용하는 경우).
mongoexport --jsonArray -d dbName -c collection -q '{fieldName: {$regex: ".*turkey.*"}}' | sed -r 's/\{ "[$]numberLong" : "([0-9]+)" }/"\1"/g' | json_pp
편집: 지정된 문서를 변환하지만 문서 목록에서는 작동하지 않습니다.변경되었다.find로.findOne.
추가 중
.forEach(function(results){results._id=results._id.toString();printjson(results)})`
에 대해서findOne()는 유효한 JSON을 출력합니다.
예:
db
.users
.findOne()
.forEach(function (results) {
results._id = results._id.toString();
printjson(results)
})
출처 : https://www.mydbaworld.com/mongodb-shell-output-valid-json/
언급URL : https://stackoverflow.com/questions/32097209/force-mongodb-to-output-strict-json
'codememo' 카테고리의 다른 글
| Postgres JSON 어레이에 문자열이 포함되어 있는지 확인합니다. (0) | 2023.02.27 |
|---|---|
| 외국 열쇠가 몽고에 있다고? (0) | 2023.02.27 |
| Typescript 개체의 인덱싱된 멤버 유형을 적용하시겠습니까? (0) | 2023.02.27 |
| 문서 사용.react에서 querySelector를 선택하십시오.대신 레퍼런스를 쓸까요? 어떻게요? (0) | 2023.02.27 |
| Python에서 숫자 목록을 jsonarray로 변환하는 방법 (0) | 2023.02.27 |