Как найти максимальную память, используемую одним документом в коллекции MonogoDB в течение 30 дней?

У меня есть 800 тыс. документов в коллекции MonoDB, один документ ({userid: '789736363828292'}) содержит 50 тыс. документов/записей. Я хотел бы найти память, используемую этим конкретным документом ({userid: '789736363828292'}) с интервалом в месяц или 30 дней.

Пожалуйста, помогите мне найти размер памяти в МБ в диапазоне дат в консоли monogo db.

Спасибо.


person Rakesh    schedule 25.02.2018    source источник


Ответы (2)


Вы можете найти размер всего такого документа, используя запрос:

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)
person Atish    schedule 25.02.2018
comment
Спасибо, Astro, этот запрос работает нормально. не могли бы вы поделиться, как добавить форматы даты в запросы Mongodb... - person Rakesh; 27.02.2018

Вы можете использовать db.col.stats() или конвейер $collStats с storageStats, чтобы получить размер коллекции.

с агрегацией можно отфильтровать документ по месяцу или диапазону дат, записать его в новую временную коллекцию, с stats.size можно получить размер в bytes, разделить на 1024*1024, чтобы получить в MB

коллекция

> 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

размер в МБ

> 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
> 
person Saravana    schedule 25.02.2018