Mongo = 단일 문서의 크기 가져 오기
나는 mongo의 이상한 행동을 만났고 그것을 조금 명확히하고 싶습니다.
내 요청은 다음과 같이 간단합니다. 단일 문서의 크기를 수집하고 싶습니다. 두 가지 가능한 해결책을 찾았습니다.
- Object.bsonsize-크기를 바이트 단위로 반환해야하는 자바 스크립트 메서드
- db.collection.stats ()-데이터에 대해 "집계 된"(평균) 크기보기를 생성하는 'avgObjSize'줄이 있습니다. 단일 문서의 평균 크기를 나타냅니다.
문서가 하나만있는 테스트 컬렉션을 만들면 두 함수가 서로 다른 값을 반환합니다. 그게 어떻게 가능해?
몽고 문서의 크기를 얻는 다른 방법이 있습니까?
여기에서 테스트를 수행하는 몇 가지 코드를 제공합니다.
새 데이터베이스 'test'를 만들고 type : "auto"속성 하나만있는 간단한 문서를 입력했습니다.
db.test.insert({type:"auto"})
stats () 함수 호출의 출력 : db.test.stats () :
{ "ns" : "test.test", "count" : 1, "size" : 40, "avgObjSize" : 40, "storageSize" : 4096, "numExtents" : 1, "nindexes" : 1, "lastExtentSize" : 4096, "paddingFactor" : 1, "systemFlags" : 1, "userFlags" : 0, "totalIndexSize" : 8176, "indexSizes" : { "_id_" : 8176 }, "ok" : 1
}
bsonsize 함수 호출의 출력 : Object.bsonsize (db.test.find ({test : "auto"}))
481
해결책을 찾았습니다. 이전 Object.bsonsize 호출에서 mongo 는 문서 자체가 아닌 CURSOR 크기를 반환했습니다.
올바른 방법은 다음 명령을 사용하는 것입니다.
Object.bsonsize(db.test.findOne({type:"auto"}))
그러면 특정 문서의 올바른 크기 (바이트)가 반환됩니다.
문서가 컬렉션에서 차지하는 유효 공간은 레코드 패딩 메커니즘으로 인해 문서 크기보다 큽니다 .
이것이 db.test.stats()
와 의 출력간에 차이가있는 이유 Object.bsonsize(..)
입니다.
문서 의 정확한 크기 (바이트) 를 얻으려면 Object.bsonsize()
함수를 고수하십시오 .
실제 크기를 얻으려면이 스크립트를 사용하는 것이 좋습니다.
db.users.find().forEach(function(obj)
{
var size = Object.bsonsize(obj);
print('_id: '+obj._id+' || Size: '+size+'B -> '+Math.round(size/(1024))+'KB -> '+Math.round(size/(1024*1024))+'MB (max 16MB)');
});
참고 : ID가 64 비트 정수인 경우 위의 경우 인쇄시 ID 값이 잘립니다! 이 경우 대신 사용할 수 있습니다.
db.users.find().forEach(function(obj)
{
var size = Object.bsonsize(obj);
var stats =
{
'_id': obj._id,
'bytes': size,
'KB': Math.round(size/(1024)),
'MB': Math.round(size/(1024*1024))
};
print(stats);
});
이것은 또한 JSON을 반환하는 이점이 있으므로 RoboMongo와 같은 GUI가이를 표로 만들 수 있습니다!
출처 : https://stackoverflow.com/a/16957505/3933634
편집 : 제안 완료에 대해 @zAlbee 에게 감사드립니다 .
참고 URL : https://stackoverflow.com/questions/22008822/mongo-get-size-of-single-document
'development' 카테고리의 다른 글
UISegmentedControl 프로그래밍 방식으로 세그먼트 수 변경 (0) | 2020.11.19 |
---|---|
API에서 iPhone IDFA를 검색하는 방법은 무엇입니까? (0) | 2020.11.19 |
bash 오류의 문자열에서 처음 5자를 검색하려고합니까? (0) | 2020.11.19 |
부트 스트랩 모달 대화 상자의 Google지도 자동 완성 결과 (0) | 2020.11.19 |
Android에서 Intent를 사용하여 활동 내에서 Android Bitmap 데이터 전달 (0) | 2020.11.19 |