当查询和集合名称变化时,通过python执行mongo查询时出错

问题描述:

我试图连接到Mongo集合,其中每次收集和查询都不同。我试图编写一个函数,其中用户将传递集合名称和查询字符串和用户将得到光标作为结果。但是这个函数没有连接到变量中的集合,而是将变量名称附加到连接对象,这里是'coll'。它也附加查询字符串而不是执行它。我试图通过硬编码集合名称来执行查询。但在这种情况下,它也不会执行查询。我的代码是这样的:当查询和集合名称变化时,通过python执行mongo查询时出错

def mongo_result(coll,query_string): 
    conn_obj=mongo_connection() #mongo_connection()-returns connection object 
    _collection=conn_obj.coll #collection: name of collection passed #while calling function**#Query string: query passed to function** 
    result=_collection.query_string #errorneous statement 
    return result 

使用pymongo.MongoClient你的函数你应该让你的连接。 另外这里我使用我的功能find method,但你可以执行任何其他operation

import pymongo 

connection = pymongo.MongoClient() 
db = connection.test 



def mongo_result(coll, **query_string): 
    _collection = pymongo.collection.Collection(db, coll) 
    if query_string: 
     return _collection.find(query_string) 
    return _collection.find() 

演示

result = mongo_result('spam') #spam is my collection's name. 
for doc in result: 
    print(doc) 

{'_id': ObjectId('54dafa385a28b3f71731efbd'), 'name': 'search string'} 
{'_id': ObjectId('54dafa3d5a28b3f71731efbe'), 'name': 'search string1'} 
{'_id': ObjectId('54dafa3f5a28b3f71731efbf'), 'name': 'search string2'} 
+0

我得到这个错误: '结果= _collection.find(QUERY_STRING ) 文件“C:\ Python34 \ lib \ site-packages \ pymongo \ collection.py”,第877行,在find 中返回Cursor(self,* args,** kwargs) 文件“C:\ Python34 \ lib \ site-packages \ pymongo \ cursor.py“,行97,在__in它___ 举类TypeError(“规范必须是一个字典的实例”) TypeError:规范必须是字典的一个实例' – fhulprogrammer 2015-02-11 07:25:16

+0

@fhulprogrammer我编辑我的答案与** DEMO **。顺便说一句如何调用函数? 'query_string'应该是'dict'或'keyword'参数的实例 – styvane 2015-02-11 07:32:59

+0

query_string =“{$ and:[{query1},{query2}]}”当我调用mongo_result('collection',query_string )它是抛出错误:TypeError:mongo_result()需要1位置参数,但2给出。当只有1个参数,即集合名称被传递时,它工作正常。 – fhulprogrammer 2015-02-11 09:46:56

在此功能中,我们可以从不同的集合返回结果和query_types

from pymongo import MongoClient 
client = MongoClient('localhost', 27017) 
db = client.test 


def query(coll_name, query_type, *args): 

    coll = db[coll_name] # coll - your collection 
    # here you have common methods of mongo 
    _ = { 
     'insert': coll.insert, 
     'update': coll.update, 
     'find': coll.find, 
     'findOne': coll.find_one 
} 
    return _[query_type](*args) 

# iterate through result 
for x in query('testtable', 'find', {'a': 'a'}): 
    print x