【发布时间】:2018-02-25 17:17:19
【问题描述】:
我在 MonoDB 集合中有 800k 个文档,一个文档({userid : '789736363828292'})有 50k 个文档/记录。我想在一个月或 30 天的间隔内找到该特定 Document({userid : '789736363828292'}) 使用的内存。
请帮我在mongo db控制台的日期范围内找到内存大小(MB)。
谢谢。
【问题讨论】:
标签: mongodb mongodb-query
我在 MonoDB 集合中有 800k 个文档,一个文档({userid : '789736363828292'})有 50k 个文档/记录。我想在一个月或 30 天的间隔内找到该特定 Document({userid : '789736363828292'}) 使用的内存。
请帮我在mongo db控制台的日期范围内找到内存大小(MB)。
谢谢。
【问题讨论】:
标签: mongodb mongodb-query
您可以使用查询找到所有此类文档的大小:
var size = 0
db.youCollection.find({userid : '789736363828292', date:{$lt:ISODate("2018-02-25T09:13:55.996Z"), $gt: ISODate("2018-01-25T09:13:55.996Z") }}).forEach(function(doc){ size = size + Object.bsonsize(doc) })
print(size)
【讨论】:
您可以使用db.col.stats() 或管道$collStats 和storageStats 来获取集合的大小
使用聚合,您可以过滤一个月或日期范围的文档,将其写入新的临时集合,使用stats.size,您可以在bytes 中获取大小,除以1024*1024 以获取它在@ 987654327@
收藏
> db.temp.drop()
true
>
> db.abc.find()
{ "_id" : ObjectId("5a924393aa451c738766d20b"), "userid" : "789736363828292", "date" : ISODate("2018-01-01T00:00:00Z") }
{ "_id" : ObjectId("5a924393aa451c738766d20c"), "userid" : "789736363828292", "date" : ISODate("2018-01-02T00:00:00Z") }
{ "_id" : ObjectId("5a924393aa451c738766d20d"), "userid" : "789736363828292", "date" : ISODate("2018-01-03T00:00:00Z") }
{ "_id" : ObjectId("5a924393aa451c738766d20e"), "userid" : "789736363828292", "date" : ISODate("2018-01-04T00:00:00Z") }
{ "_id" : ObjectId("5a924393aa451c738766d20f"), "userid" : "789736363828292", "date" : ISODate("2018-01-05T00:00:00Z") }
聚合
> db.abc.aggregate([
... {$match : {userid : '789736363828292', date : {$gt : new Date("2018-01-01")}, date : {$lt : new Date("2018-01-31")}}},
... {$out : "temp"}
... ])
以字节为单位的大小
> db.temp.stats().size
320
以 MB 为单位的大小
> db.temp.stats().size/1024/1024
0.00030517578125
>
删除临时集合
> db.temp.drop()
true
>
$collStats 和 storageStats
> var d = db.temp.aggregate({$collStats:{storageStats: {}}}).pretty()
> d.forEach(d => print(d.storageStats.size/1024/1024))
0.00030517578125
>
【讨论】: