我的计算机上有许多mongoDB数据库和集合:
{"key": [], "business-01": ["reviews", "system.indexes"], "test": [], "test_database": ["posts", "system.indexes"]}
虽然我可以自己计算每个集合,但我如何迭代每一个集合呢?我试图使用聚合器:
results = sr2.aggregate([
{ group: {_id: null, count: {$sum: 1}}}
])
或使用:
results = collection.aggregate([
# Unwind the array
{ "$unwind": "$all" },
# Group the results and count
{ "$group": {
"_id": "$somekey",
"count": { "$sum": 1 }
}}
])
但我试过的所有配置都给了我随机的十六进制:
business-01 corresponds to ['reviews', 'system.indexes']
<pymongo.command_cursor.CommandCursor object at 0x7fa219f9b630>
<pymongo.command_cursor.CommandCursor object at 0x7fa219f9b630>
key corresponds to []
test corresponds to []
admin corresponds to []
我需要每个的格式化输出:
{id:business-01, col:reviews, feilds:21}
{id:business-01, col:system.indexes, feilds:0}
{id:test, col:na}
{id:test_database, col:posts, feilds:500}
{id:test_database, col:system.indexes, feilds:0}
我在64位Ubuntu上使用pymongo。
答案 0 :(得分:1)
聚合是针对集合而不是数据库执行的。
可以在python中计算每个数据库中所有集合的文档数。
from pymongo import MongoClient
client = MongoClient()
result = []
for dbname in client.database_names():
db = client[dbname]
for collection in db.collection_names():
count = db[collection].count()
result.append({'id': dbname, 'col': collection, 'count': count})
print(result)
答案 1 :(得分:1)
pymongo说count已被弃用。注意:
DeprecationWarning:不建议使用count。使用estimate_document_count 或count_documents。
您可以像这样使用count_documents
:
count = collection.count_documents({})
我今天遇到了计数问题,并且我注意到count_documents方法不适用于大量收集。这是因为count_documents像查询一样工作,没有任何过滤器并扫描整个集合。 estimated_document_count正在使用集合元数据获取文档计数。使用estimated_document_count
代替count_documents
解决了我的问题。