我有一个Database类,其中定义了多种方法,例如find_one,find,update等。这是示例:
@staticmethod
def find(collection, query):
return Database.DATABASE[collection].find(query)
要返回所有项目并将它们作为类元素返回,我以后可以在其他一些类中使用以下代码来循环遍历:
@classmethod
def all(cls):
return [cls(**elem) for elem in Database.find(ItemConstants.COLLECTION, {})]
我要做的是根据我经过的列名返回最小值:
@classmethod
def get_by_parameters(cls, name, category, url, size):
return [cls(**elem) for elem in Database.find(ItemConstants.COLLECTION,
{"name": name, "category": category, "url": url,
"size": size}).sort('time', pymongo.DESCENDING).limit(1)][0]
这项工作完全正常,并返回一个单独的类项目。
但是我正在努力的是尝试在Database类中创建一个名为find_min的方法,这是该方法的代码: 数据库类:
@staticmethod
def find_min(collection, query, column):
Database.DATABASE[collection].find(query).sort({column: pymongo.ASCENDING}).limit(1)
这就是我使用另一种方法进行调用的方式。
@classmethod
def get_by_parameters(cls, name, category, url, size):
return cls(**Database.find_min(ItemConstants.COLLECTION,
{"name": name, "category": category, "url": url,
"size": size}, 'time'))
它不起作用,出现以下错误:
文件 “ D:\ python_projects \ price_tracker \ venv \ lib \ site-packages \ pymongo \ cursor.py”, 第676行,按排序键= helpers._index_list(key_or_list,方向) 文件 “ D:\ python_projects \ price_tracker \ venv \ lib \ site-packages \ pymongo \ helpers.py”, 第63行,在_index_list中,引发TypeError(“如果未指定方向, “ TypeError:如果未指定方向,则key_or_list必须为 列表的实例
答案 0 :(得分:0)
我错过了一份退货声明。因此,当前我的数据库find min方法看起来像这样:
@staticmethod
def find_min(collection, query, column):
return Database.DATABASE[collection].find(query).sort(column, pymongo.ASCENDING).limit(1)
哪个返回列表,里面有一个字典元素!
另一个调用上述方法的URL类如下:
@classmethod
def find_oldest(cls):
return cls(**Database.find_min(URLConstants.COLLECTION, {}, "last_run_time")[0])
要在数据库类已通过我们的列表中选择此signle字典元素,我在[0]行的enc处使用切片方法
我了解pymongo.find返回一个列表,但是这与要求pymongo将列表限制为1(我认为该列表不再是列表)的选项背道而驰。