【问题标题】:pymongo return max value in a collectionpymongo 返回集合中的最大值
【发布时间】:2018-12-20 02:08:21
【问题描述】:

我有一个数据库类,其中定义了多个方法,例如 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, direction) 文件 "D:\python_projects\price_tracker\venv\lib\site-packages\pymongo\helpers.py", 第 63 行,在 _index_list 中引发 TypeError("如果没有指定方向, " TypeError: 如果没有指定方向,key_or_list 必须是 列表实例

【问题讨论】:

    标签: python-3.x pymongo


    【解决方案1】:

    我错过了退货声明。所以目前我的数据库 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])
    

    为了在数据库类传递给我们的列表中提取这个符号字典元素,我在行 [0] 的 enc 处使用切片方法

    我知道 pymongo.find 返回一个列表,但它有点违背要求 pymongo 将列表限制为 1 的选项,在我看来这不再是一个列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-24
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多