获取MongoDB中列的最高值

rol*_*usa 28 ruby mongodb mongodb-ruby

我一直在帮助获取mongo文档列的最高值.我可以对它进行排序并获得顶部/底部,但我很确定有更好的方法可以做到这一点.

我尝试了以下(和不同的组合):

transactions.find("id" => x).max({"sellprice" => 0})
Run Code Online (Sandbox Code Playgroud)

但它一直在抛出错误.除了排序和获得顶部/底部之外,有什么好的方法呢?

谢谢!

Mic*_*ile 48

max()无法按照您在SQL中为Mongo所期望的方式工作.这可能会在将来的版本中发生变化,但截至目前,max,min将与索引键一起使用,主要在内部进行分片.

请参阅http://www.mongodb.org/display/DOCS/min+and+max+Query+Specifiers

不幸的是,现在获得最大值的唯一方法是对该值进行排序desc并取第一个.

transactions.find("id" => x).sort({"sellprice" => -1}).limit(1).first()
Run Code Online (Sandbox Code Playgroud)


小智 19

排序可能有点过分.你可以做一个小组

db.messages.group(
           {key: { created_at:true },
            cond: { active:1 },
            reduce: function(obj,prev) { if(prev.cmax<obj.created_at) prev.cmax = obj.created_at; },
            initial: { cmax: **any one value** }
            });
Run Code Online (Sandbox Code Playgroud)

  • 考虑到[手册中的这个引用](http://docs.mongodb.org/manual/reference/operator/aggregation/limit/)*"当$ sort排在$ limit之前时,我不会说这是一种矫枉过正在管道中,$ sort操作仅在进展时保持前n个结果,其中n是指定的限制"* (5认同)

小智 8

db.collectionName.aggregate(
  {
    $group : 
    {
      _id  : "",
      last : 
      {
        $max : "$sellprice"
      }
    }
  }
)
Run Code Online (Sandbox Code Playgroud)


jat*_*tal 5

用于计算聚合的示例mongodb shell代码.

请参阅组的mongodb手册条目(许多应用程序):: http://docs.mongodb.org/manual/reference/aggregation/group/#stage._S_group

在下面,将$ vars替换为您的集合键和目标变量.

db.activity.aggregate( 
  { $group : {
      _id:"$your_collection_key", 
      min: {$min : "$your_target_variable"}, 
      max: {$max : "$your_target_variable"}
    }
  } 
)
Run Code Online (Sandbox Code Playgroud)