我正在尝试使用pymongo捕获数组大小(以字节为单位的bson大小)。以下是示例文档结构
我可以使用以下代码段
检索整个文档大小for doc in src_db.src_coll.find({'customProperties':{ '$exists' : True }}).limit(2):
print(len(bson.BSON.encode(doc)))
但是我无法计算每个子数组的大小,示例代码是失败的,
for doc in src_db.Quotes.find({'customProperties':{ '$exists' : True }}).limit(1):
print('doc_size:'+str(len(bson.BSON.encode(doc))))
doc_customProp = doc["customProperties"]
print('custom_prop_size:'+str(len(bson.BSON.encode(doc_customProp))))
输出错误:
doc_size: 363953
Traceback (most recent call last):
File "./document_stats.py", line 15, in <module>
print('custom_prop_size:'+str(len(bson.BSON.encode(doc_customProp))))
File "/usr/lib64/python2.7/site-packages/bson/__init__.py", line 976, in encode
return cls(_dict_to_bson(document, check_keys, codec_options))
TypeError: encoder expected a mapping type but got: [[u'custValue', u'{"identifier":"","productId":["3"]}']]
预期产出:
doc_size: 363953
custom_prop_size: *****
答案 0 :(得分:0)
您应该可以使用以下投影来限制从MongoDB中获得的内容:
src_db.Quotes.find({'customProperties':{ '$exists' : True }}, {"_id": 0, "customProperties": 1})
然后您可以简单地获得整个文档的大小。