28

私はmongoドキュメントの列で最高の値を取得するためにいくつかの助けを求めてきました。並べ替えて上/下を取得することはできますが、もっと良い方法があると確信しています。

私は以下を試しました(そしてさまざまな組み合わせ):

transactions.find("id" => x).max({"sellprice" => 0})

しかし、それはエラーをスローし続けます。上/下を並べ替えて取得する以外に、それを行うための良い方法は何ですか?

ありがとうございました!

4

9 に答える 9

48

max()は、SQLforMongoで期待するようには機能しません。これは将来のバージョンで変更される可能性がありますが、現時点では、max、minは、主にシャーディングのために内部的にインデックス付きキーで使用されます。

http://www.mongodb.org/display/DOCS/min+and+max+Query+Specifiersを参照してください

残念ながら、現時点で最大値を取得する唯一の方法は、コレクションの説明をその値で並べ替えて、最初の値を取得することです。

transactions.find("id" => x).sort({"sellprice" => -1}).limit(1).first()
于 2011-01-21T20:25:46.633 に答える
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** }
            });
于 2011-11-25T14:00:21.013 に答える
9
db.collectionName.aggregate(
  {
    $group : 
    {
      _id  : "",
      last : 
      {
        $max : "$sellprice"
      }
    }
  }
)
于 2013-05-24T18:55:07.990 に答える
5

集計を計算するためのmongodbシェルコードの例。

グループの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"}
    }
  } 
)
于 2013-06-05T22:30:51.413 に答える
3

アグリゲート()を使用する:

db.transactions.aggregate([
  {$match: {id: x}},
  {$sort: {sellprice:-1}},
  {$limit: 1},
  {$project: {sellprice: 1}}
]);
于 2013-05-23T20:13:55.020 に答える
3

それはあなたの要件に従って動作します。

transactions.find("id" => x).sort({"sellprice" => -1}).limit(1).first()
于 2015-03-30T11:30:01.417 に答える
0

列のインデックスが作成されている場合、Mongoがインデックスを使用して順序付けられたコレクションを取得すると仮定すると、並べ替えは問題ありません。それ以外の場合は、表示された最大値をメモして、コレクションを反復処理する方が効率的です。例えば

max = nil
coll.find("id" => x).each do |doc| 
    if max == nil or doc['sellprice'] > max then
        max = doc['sellprice'] 
    end
end

(私のRubyが少し厄介な場合は、長い間使用していませんが、一般的なアプローチはコードから明確になっているはずです。)

于 2011-01-21T20:32:10.717 に答える
0

Rubyドライバーを使用していると仮定すると(下部にmongodb-rubyタグが表示されています)、最大値を取得したい場合は次のようにします_id(ソート可能であると仮定します_id)。私の実装では、私_idは整数でした。

result = my_collection.find({}, :sort => ['_id', :desc]).limit(1)

_idコレクションの最小値を取得するには、次のように変更:descします。:asc

于 2011-09-20T15:36:58.283 に答える
0

次のクエリは同じことをします: db.student.find({}, {'_id':1}).sort({_id:-1}).limit(1)

私にとって、これは次の結果を生み出しました: { "_id" : NumberLong(10934) }

于 2014-11-03T16:23:46.437 に答える