Mongodb에서 단일 문서의 크기를 얻는 방법은 무엇입니까?
몽고의 이상한 행동을 보았는데, 좀 더 명확히 하고 싶은데...
내 요청은 간단하다.컬렉션에 있는 단일 문서를 받고 싶습니다.저는 두 가지 가능한 해결책을 찾았습니다.
- Object.bsonsize - 바이트 단위로 크기를 반환해야 하는 javascript 메서드
- db.collection.stats() - 데이터 상에서 "집약"(평균) 크기 뷰를 생성하는 'avgObjSize' 행이 있습니다.단순히 단일 문서의 평균 크기를 나타냅니다.
하나의 문서만으로 테스트 컬렉션을 만들면 두 함수가 서로 다른 값을 반환합니다.그게 어떻게 가능해?
mongo 문서의 사이즈를 구할 수 있는 다른 방법이 있나요?
여기에서는 테스트에 사용하는 코드를 몇 가지 나타냅니다.
새 데이터베이스 'test'를 만들고 "auto" 유형만 가진 단순 문서를 입력했습니다.
db.test.insert({type:"auto"})
stats() 함수 호출로부터의 출력: db.test.syslog():
{ "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()
Mongodb는 문서가 아닌 커서의 크기를 반환했습니다.
올바른 방법은 다음 명령을 사용하는 것입니다.
Object.bsonsize(db.test.findOne())
와 함께findOne()
특정 문서에 대한 쿼리를 정의할 수 있습니다.
Object.bsonsize(db.test.findOne({type:"auto"}))
그러면 특정 문서의 올바른 크기(바이트)가 반환됩니다.
최대 문서 크기 16 MiB (소스)
버전 > = 4.4 의 경우 ($bsonSize
소스)
db.users.aggregate([
{
"$project": {
"size_bytes": { "$bsonSize": "$$ROOT" },
"size_KB": { "$divide": [{"$bsonSize": "$$ROOT"}, 1000] },
"size_MB": { "$divide": [{"$bsonSize": "$$ROOT"}, 1000000] }
}
}
])
버전이 4.4 미만인 경우(Object.bsonSize()
소스)
다음 스크립트를 사용하여 실제 크기를 가져올 수 있습니다.
db.users.find().forEach(function(obj)
{
var size = Object.bsonsize(obj);
print('_id: '+obj._id+' || Size: '+size+'B -> '+Math.round(size/(1000))+'KB -> '+Math.round(size/(1000*1000))+'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/(1000)),
'MB': Math.round(size/(1000*1000))
};
print(tojson(stats));
});
JSON을 반환할 수 있는 장점도 있기 때문에 RoboMongo와 같은 GUI로 표화할 수 있습니다!
edit : 제안 완료에 대해 @zAlbee님 감사합니다.
레코드 패딩 메커니즘으로 인해 문서가 컬렉션에서 차지하는 유효 공간은 문서 크기보다 커집니다.
이 때문에, 출력에 차이가 있습니다.db.test.stats()
그리고.Object.bsonsize(..)
.
문서의 정확한 크기(바이트)를 가져오려면Object.bsonsize()
기능.
mongodb 4.4 (향후 출시)에서는 연산자를 사용하여 문서 크기를 가져올 수 있습니다.
db.test.aggregate([
{
"$project": {
"name": 1,
"object_size": { "$bsonSize": "$$ROOT" }
}
}
])
Object.bssonsize(db.test.findOne({type:"auto"})) 바이트 단위입니다.
★★Object.bsonsize()
는, 레거시 「」에서만할 수 .mongo
new 셸 new shell 。mongosh
패키지 bson 또는 mongocompat 스니펫을 사용해야 합니다.
const BSON = require("bson");
BSON.calculateObjectSize({field: "value"})
BSON.calculateObjectSize(db.test.findOne())
언급URL : https://stackoverflow.com/questions/22008822/how-to-get-the-size-of-single-document-in-mongodb
'programing' 카테고리의 다른 글
재료-ui 자동완료 경고 자동완료에 제공된 값이 잘못되었습니다. (0) | 2023.04.01 |
---|---|
JSON을 프로그램적으로 아름답게 하려면 어떻게 해야 하나요? (0) | 2023.04.01 |
Django 앱의 Access-Control-Allow-Origin (0) | 2023.04.01 |
로컬에서 값을 읽습니다.vs 2017 Azure Function 개발에서 settings.json을 소개합니다. (0) | 2023.04.01 |
401(Authentication Error)을 액시스로 처리하여 어떻게 대응합니까? (0) | 2023.04.01 |