我有一个包含超过 100k 个文档的 MongoDB 集合(这个数字会不断增长)。每个文档都有几个字段是单个值,大约 50 个字段都是长度为 1000 的数组。我正在使用 rmongodb 分析 R 中的结果。
在 rmongodb 中,我使用mongo.find.all()
将查询设置为要搜索的某些条件组合,并将字段设置为要返回的字段的子集。mongo shell 中的等价物类似于:
db.collection.find({query1 : "value1", query2 : "value2"},{field1 : 1, field2 : 1, field3 : 1})
这将返回结果的 data.frame,我对其进行一些后处理并最终得到一个 data.table。
我想做的是为查询添加一些保护措施。如果查询范围很广,并且返回的字段是许多较大的数组字段,则结果 data.table 可能在几十 GB。这可能是预期的,但我想添加一些标志或错误检查,以免有人不小心尝试一次返回数百 GB。
我知道我可以计算与查询匹配的文档数量(mongo.count
在 rmongodb 中,db.collection.find({...},{...}).count()
在 shell 中)。我还可以获得平均文档大小 ( db.collection.stats().avgObjSize
)。
我不知道该怎么做,也不知道是否可能,是在实际返回查找之前获取查找的大小(以 MB 为单位,而不是数字)。由于我经常只返回字段的子集,因此 count 和 avgObjSize 并不能非常准确地估计结果 data.table 的大小。大小需要同时考虑查询和字段。
有没有这样的命令db.collection.find({},{}).sizeOf()
会返回我的查找(查询,字段)的 MB 大小?我能看到的唯一选项是count()
两者size()
都返回文档的数量。