如何获取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中字段的最大值的主要内容,如果未能解决你的问题,请参考以下文章