【问题标题】:Is there anyway to get maximum value in a column using mongoengine?反正有没有使用 mongoengine 在列中获得最大值?
【发布时间】:2019-04-22 18:43:15
【问题描述】:

我想知道是否有一种方法可以使用 Mongoengine 在 MongoDB 集合的列中获取最大值。有可能吗?

【问题讨论】:

标签: python mongodb aggregation-framework mongoengine


【解决方案1】:

如果您的序数值列被命名为“max_column”:

MyDocument.objects().order_by("-max_column").limit(-1).first()

【讨论】:

  • limit(-1) 有什么作用?在文档中它只讨论了一个正值或一个 0...
  • 不是 first() 隐式地对请求设置了一个限制 (1) 吗?
  • @Mr.WorshipMe 请参阅 mongo 有线协议文档中的 numberToReturn如果 numberToReturn 为 0,则 db 将使用默认返回大小。如果该数字为负数,则数据库将返回该数字并关闭游标。无法获取该查询的更多结果。如果 numberToReturn 为 1,服务器会将其视为 -1(自动关闭光标)。
  • @tinix 谢谢,我错过了关于负数的那部分。由于 first() 已经返回单个对象并关闭光标 - 这里使用 limit(-1) 不是多余的吗?
  • @Mr.WorshipMe first() 仅打开结果集以获取一个对象。如果您调用一个返回 500 个对象的查询,并对其调用 first(),您仍然会从数据库中返回 500 个对象(通过游标),但 ORM 只会丢弃您弹出的 first() 项之外的所有对象关闭结果集。 -1 只是在一个结果后关闭数据库中的游标,因此您不会获取所有其他对象或让游标保持打开状态。你只取一个,只有一个。这是一种优化。
【解决方案2】:

从文档中隐藏(请注意以请求补丁)是 .get_collection() 访问器,它返回集合的原始 pymongo 对象。这里可以使用.aggregate()之类的操作

ClassModel._get_collection().aggregate([
    { "$group": {
        "_id": Null,
        "max_column": { "$max": "$column" }
    }}
])

当然,ClassModel 是您正在使用的实际类,“column”是您希望从中获取最大值的列的名称,使用 $max 运算符获得。字段上的$ 前缀是聚合框架识别管道中字段变量的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-24
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    相关资源
    最近更新 更多