当查询和集合名称变化时,通过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'}
答
在此功能中,我们可以从不同的集合返回结果和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
我得到这个错误: '结果= _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
@fhulprogrammer我编辑我的答案与** DEMO **。顺便说一句如何调用函数? 'query_string'应该是'dict'或'keyword'参数的实例 – styvane 2015-02-11 07:32:59
query_string =“{$ and:[{query1},{query2}]}”当我调用mongo_result('collection',query_string )它是抛出错误:TypeError:mongo_result()需要1位置参数,但2给出。当只有1个参数,即集合名称被传递时,它工作正常。 – fhulprogrammer 2015-02-11 09:46:56