Mongo没有max函数,该如何解决?

问题描述

| 我有一个MongoDB集合,需要在所有文档中查找某个字段的max()值。这个值是时间戳,我需要通过找到最大的时间戳来找到最新的文档。对其进行排序并获得第一个将很快变得效率低下。我是否应该单独维护\'maxval \'并在文档到达该字段的值较大时对其进行更新?还有更好的建议吗? 非常感谢。     

解决方法

        要确定它是否是大集合,并且如果您始终需要显示最大时间戳,则可能需要创建单独的集合并在其中存储统计数据,而不是每次都订购大集合。
statistic
{
  _id = 1,id_from_time_stamp_collection = \'xxx\',max_timestamp: value
}
并且每当新文档问世时,只需更新id = 1(在查询中带有$ gt条件)的统计信息集合,因此,如果新时间戳大于max_timestamp,则max_timestamp将被更新,否则-否)。 也可能您可以在统计信息收集中存储和更新其他统计数据。     ,        如果您在timestamp字段上有索引,则找到最大值非常有效,例如
db.things.find().sort({ts:-1}).limit(1)
但是如果索引过多,将最大值存储在单独的集合中可能会比较好。     ,        尝试使用db.collection.group 例如,使用此集合:
> db.foo.find()
{ \"_id\" : ObjectId(\"...\"),\"a\" : 1 }
{ \"_id\" : ObjectId(\"...\"),\"a\" : 200 }
{ \"_id\" : ObjectId(\"...\"),\"a\" : 230 }
{ \"_id\" : ObjectId(\"...\"),\"a\" : -2230 }
{ \"_id\" : ObjectId(\"...\"),\"a\" : 5230 }
{ \"_id\" : ObjectId(\"...\"),\"a\" : 530 }
{ \"_id\" : ObjectId(\"...\"),\"a\" : 1530 }
您可以使用
group
> db.foo.group({
    initial: { },reduce: function(doc,acc) {
        if(acc.hasOwnProperty(\'max\')) {
            if(acc.max < doc.a)
                acc.max = doc.a;
        } else {
            acc.max = doc.a
        }
      }
    })
[ { \"max\" : 5230 } ]
由于
group
中没有
key
值,因此所有对象都分组在一个结果中     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...