2017-08-20 5 views
1

J'ai un curseur ouvert sur ma base de données et j'ai une collection avec le nom client dans la base de données. Quand je suis en train d'exécuter une requête commePyMongo ne reconnaît pas si le nom de la collection est client

def connect_to_primary(host, port): 
    """this function is to connect to primary host in a replicaset""" 
    connection = MongoClient(str(host), int(port)) 
    admindb = connection.admin 
    pri_host_port_con = admindb.command("isMaster") 
    primary_con = pri_host_port_con['primary'] 
    pri_host_port = primary_con.replace(':', ' ').split() 
    pri_host = pri_host_port[0] 
    pri_port = pri_host_port[1] 
    final_connection = MongoClient(str(pri_host), int(pri_port)) 
    return final_connection 

connect_to_primary(host,port)[db].client.find({}).distinct('clientid') 

Je reçois l'erreur suivante:

File "/usr/lib64/python2.7/site-packages/pymongo/database.py", line 1116, in __call__ 
    self.__name, self.__client.__class__.__name__)) 
TypeError: 'Database' object is not callable. If you meant to call the 'find' method on a 'MongoClient' object it is failing because no such method exists. 

ce qui ne va pas ici?

Répondre

0

La raison pour laquelle vous obtenez ceci parce que Database instances ont un client attribut qui renvoie l'instance de client de la base de données comme indiqué dans la session interactive Python suivante.

>>> import pymongo 
>>> connection = pymongo.MongoClient() 
>>> db = connection["test"] 
>>> db 
Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'test') 
>>> db.client 
MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True) 

La seule solution consiste à utiliser le procédé get_collection ou l'opérateur [].

>>> db["client"] 
Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'test'), 'client') 
>>> db.get_collection("client") 
Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'test'), 'client')