如何使用pymongo从mongodb返回一个集合

时间:2021-09-10 16:20:31

I'm trying to create a Collection Class in Python to access the various collections in my db. Here's what I've got:

我正在尝试在Python中创建一个Collection类来访问我的db中的各种集合。这是我得到的:

import sys
import os
import pymongo
from pymongo import MongoClient

class Collection():

    client = MongoClient()

def __init__(self, db, collection_name):
    self.db = db
    self.collection_name = collection_name
    # self.data_base = getattr(self.client, db)
    # self.collObject = getattr(self.data_base, self.collection_name)

def getCollection(self):
    data_base = getattr(self.client, self.db)
    collObject = getattr(data_base, self.collection_name)
    return collObject


def getCollectionKeys(self, collection):
    """Get a set of keys from a collection"""
    keys_list = []
    collection_list = collection.find()
    for document in collection_list:
        for field in document.keys():
            keys_list.append(field)
    keys_set =  set(keys_list)
    return keys_set

if __name__ == '__main__':
    print"Begin Main"

    agents = Collection('hkpr_restore','agents')
    print "agents is" , agents
    agents_collection = agents.getCollection
    print agents_collection
    print agents.getCollectionKeys(agents_collection)

I get the following output:

我得到以下输出:

Begin Main
agents is <__main__.Collection instance at 0x10ff33e60>
<bound method Collection.getCollection of <__main__.Collection instance at 0x10ff33e60>>
Traceback (most recent call last):
  File "collection.py", line 52, in <module>
    print agents.getCollectionKeys(agents_collection)
  File "collection.py", line 35, in getCollectionKeys
    collection_list = collection.find()
AttributeError: 'function' object has no attribute 'find'

The function getCollectionKeys works fine outside of a class. What am I doing wrong?

函数getCollectionKeys在类之外工作正常。我究竟做错了什么?

1 个解决方案

#1


This line:

agents_collection = agents.getCollection

Should be:

agents_collection = agents.getCollection()

Also, you don't need to use getattr the way you are. Your getCollection method can be:

此外,您不需要像现在这样使用getattr。你的getCollection方法可以是:

def getCollection(self):
    return self.client[self.db][self.collection_name]

#1


This line:

agents_collection = agents.getCollection

Should be:

agents_collection = agents.getCollection()

Also, you don't need to use getattr the way you are. Your getCollection method can be:

此外,您不需要像现在这样使用getattr。你的getCollection方法可以是:

def getCollection(self):
    return self.client[self.db][self.collection_name]