如何获取MongoDB中字段的最大值

Posted

技术标签:

【中文标题】如何获取MongoDB中字段的最大值【英文标题】:how to get the max value of a field in MongoDB 【发布时间】:2016-06-29 07:19:52 【问题描述】:

喜欢:

id:4563214321,updateTime:long("124354354")

总是有新的集合进入数据库,所以我想总是得到最新的更新的文档,也就是最大的更新时间。如何设计shell脚本?提前致谢。

【问题讨论】:

你可能会在这里得到答案***.com/questions/22118210/… 【参考方案1】:

这是一个重复的问题,您可以在此链接中找到答案 Using findOne in mongodb to get element with max id

这样使用,

db.collection.find().sort(updateTime:-1).limit(1).pretty()

作为 findOne,您可以使用以下语法:

db.collection.findOne($query:,$orderby:_updateTime:-1)

【讨论】:

我还有一个问题是我在一个文档中有多个字段。如何根据最大更新时间返回整个文档(里面的所有字段)?【参考方案2】:

您可以结合使用限制和排序来实现此目标。

db.collectionName.find().sort("updateTime" : -1).limit(1)

这将根据更新时间对所有字段进行排序,然后只返回一个最大值。

我建议向该字段添加索引以提高性能。

【讨论】:

谢谢!我已经尝试过该方法,这确实有效,并且我对此进行了进一步了解:例如,我初始化了 100 个文档,然后又输入了 100 个。因此,数据库将再次对所有 200 个文档重新排序,因此另一个数据将输入,这意味着每次在数据库中有更新时,它都会运行所有数据进行排序。我现在想知道是否有更有效的方法来做到这一点?是否有可能在服务器端进行操作来实现这一点? @OscarShaw 索引您正在排序的字段,它将显着提高性能。请参阅docs.mongodb.org/manual/indexes 优化这是另一个问题,所以我不能在这里讨论太多细节。这违反了 SO 政策。 太棒了!我认为索引会有所帮助!最后一个问题,我什至不知道是否可以这样做。我在一个文档中有多个字段。我如何根据最大的更新时间返回整个文档(里面的所有字段)。我的意思不仅仅是组合在一起并使用 $max 返回一个新的命名字段。我想返回最大 updateTime 所在的文档。我应该编写一些 javascript 方法吗? @OscarShaw 我给你的命令将根据“正常运行时间”的最高值返回整个文档。在 mongo shell 中键入命令,如果需要,请使用虚拟数据,但将返回整个文档。如果这对您有帮助,请标记为正确,谢谢。

以上是关于如何获取MongoDB中字段的最大值的主要内容,如果未能解决你的问题,请参考以下文章

获取mongodb中最大计数的字段名称

如何在 mongoDB 的集合数组中获取字段名称?

mongodb如何从集合中获取最大值

如何从 mongodb 到 html 表单字段中获取数据?

如何在mongodb的对象数组中获取指定字段的值

如何在mongodb的聚合查询中获取虚拟字段?