首页 > 解决方案 > 如何在pymongo的循环内循环所有mongodb集合和集合数据

问题描述

我正在读取 mongodb 数据库的所有集合,同时在 for 循环中循环集合名称以使用 pymongo 动态获取每个集合数据。

这是在带有 pymongo 的 python 3.7 和 mongodb 3.4 上运行的

from pymongo import MongoClient
from bson.objectid import ObjectId
import json


client = MongoClient("localhost", 27017, maxPoolSize=50)
#print(client)
mydatabase = client["testdb"]

collections = mydatabase.collection_names(include_system_collections=False)

for collectionName in collections:
    print(collectionName)

    mydata = mydatabase.collectionName.find({})

    for value in mydata:
        print(value)
        for key,valueOFproject in value:
            print(key)
            print(value)

D b

第一个集合

{
    "_id" : "hiphdkTest_HIPHDK_76P1_P00_19WW09Test",
    "project" : "hiphdktest",
    "config" : "HIPHDK_76P1_P00_19WW09test",
    "manual" : {
        "tag1" : "fdsfsdfsd",
        "No" : "No",
        "prqdata1" : "fsdfadfasdfasdfsdfsd",
        "admin1" : "dbhiphdk"
    }
}

第二次收集

{
    "_id" : "hiphdk_HIPHDK_76P1_P00",
    "project" : "hiphdk",
    "config" : "HIPHDK_76P1_P00",
    "manual" : {
        "tag1" : "fdsfsdfsd",
        "No" : "No",
        "prqdata1" : "fsdfadfasdfasdfsdfsd",
        "admin1" : "dbhiphdk"
    }
}

第三次收藏

{
    "_id" : "hiphdk_HIPHDK_76P1_P00_19WW09",
    "project" : "hiphdk",
    "config" : "HIPHDK_76P1_P00_19WW09",
    "manual" : {
        "tag1" : "fdsfsdfsd",
        "No" : "No",
        "prqdata1" : "fsdfadfasdfasdfsdfsd",
        "admin1" : "dbhiphdk"
    }
}

只获取集合名称

hiphdk_HIPHDK_76P1_P00_19WW09 hiphdk_HIPHDK_76P1_P00 hiphdkTest_HIPHDK_76P1_P00_19WW09Test

它应该打印集合名称和每个集合的数据。

标签: pythonpymongo

解决方案


关键的变化是这条线mydata = mydatabase[collectionName].find({})

看看这是否能满足您的需求:

from pymongo import MongoClient
from bson.json_util import dumps

client = MongoClient("localhost", 27017, maxPoolSize=50)
mydatabase = client["testdb"]

collections = mydatabase.list_collection_names(include_system_collections=False)

for collectionName in collections:
    mydata = mydatabase[collectionName].find({})
    for value in mydata:
        print(dumps(value))

推荐阅读