code

MongoDB에서 열의 가장 높은 값 가져오기

starcafe 2023. 7. 2. 20:51
반응형

MongoDB에서 열의 가장 높은 값 가져오기

저는 몽고 문서의 칼럼에서 가장 높은 값을 얻는 데 도움을 요청했습니다.나는 그것을 분류해서 위/아래를 얻을 수 있지만, 나는 그것을 하는 더 나은 방법이 있다고 확신합니다.

저는 다음과 같은 (그리고 다른 조합) 시도했습니다.

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

하지만 그것은 계속해서 오류를 던집니다.상하를 구분하는 것 외에 그것을 하는 좋은 방법은 무엇이 좋을까요?

감사해요!

max()는 Mongo의 SQL에서 예상하는 방식으로 작동하지 않습니다.이는 향후 버전에서 변경될 수 있지만 현재 max,min은 주로 내부적으로 샤딩을 위해 인덱스 키와 함께 사용될 예정입니다.

http://www.mongodb.org/display/DOCS/min+and+max+Query+Specifiers 을 참조하십시오.

안타깝게도 현재 최대값을 가져오는 유일한 방법은 해당 값에 대한 컬렉션 설명을 정렬하고 첫 번째 값을 취하는 것입니다.

transactions.find("id" => x).sort({"sellprice" => -1}).limit(1).first()

정렬이 너무 복잡할 수 있습니다.그냥 그룹으로 하면 됩니다.

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** }
            });
db.collectionName.aggregate(
  {
    $group : 
    {
      _id  : "",
      last : 
      {
        $max : "$sellprice"
      }
    }
  }
)

집계 계산을 위한 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"}
    }
  } 
)

aggregate() 사용:

db.transactions.aggregate([
  {$match: {id: x}},
  {$sort: {sellprice:-1}},
  {$limit: 1},
  {$project: {sellprice: 1}}
]);

그것은 당신의 요구에 따라 작동할 것입니다.

transactions.find("id" => x).sort({"sellprice" => -1}).limit(1).first()

열이 인덱스된 경우 Mongo가 인덱스를 사용하여 순서가 지정된 컬렉션을 가져온다고 가정하면 정렬이 가능합니다.그렇지 않으면 가장 큰 값을 기록하면서 컬렉션을 반복하는 것이 더 효율적입니다.

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

(만약 제 루비가 좀 거칠다면 죄송합니다, 오랫동안 사용하지 않았습니다. 하지만 일반적인 접근법은 코드에서 분명해야 합니다.)

루비 드라이버를 사용하고 있다고 가정하면(하단에 mongodb-ruby 태그가 있음), 최대를 얻고 싶다면 다음과 같은 것을 할 것입니다._id(내 생각엔._id정렬 가능).내 구현에서, 나의_id정수였습니다.

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

최소 값을 얻기 위해_id컬렉션에서, 그냥 바꿔주세요.:desc로.:asc

다음 쿼리에서도 동일한 작업을 수행합니다.db.student.find({}, {'_id':1}).sort({_id:-1}).limit(1)

저의 경우, 이것은 다음과 같은 결과를 낳았습니다.{ "_id" : NumberLong(10934) }

언급URL : https://stackoverflow.com/questions/4762980/getting-the-highest-value-of-a-column-in-mongodb

반응형