복붙노트

[MONGODB] MongoDB의의 열 가장 높은 값을 얻기

MONGODB

MongoDB의의 열 가장 높은 값을 얻기

나는 몽고 문서에 대한 열에서 가장 높은 값을 받고 몇 가지 도움있었습니다. 나는 그것을 분류하고, 위 / 아래를 얻을 수 있지만, 나는 확신을 할 수있는 더 좋은 방법이 있어요 수 있습니다.

나는 다음과 같은 (서로 다른 조합을) 시도 :

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

그러나 그것은 오류를 던지고 유지합니다. 정렬과 위 / 아래를 얻기 외에 그것을 할 수있는 좋은 방법은 무엇입니까?

감사합니다!

해결법

  1. ==============================

    1.최대 ()는 당신이 몽고에 대한 SQL에서 그것을 기대하는대로 작동하지 않습니다. 이것은 아마도 미래 버전에서 변경 될 것입니다하지만 지금의로, 최대, 최소는 샤딩 주로 내부적으로 인덱스 키를 사용할 수 있습니다.

    최대 ()는 당신이 몽고에 대한 SQL에서 그것을 기대하는대로 작동하지 않습니다. 이것은 아마도 미래 버전에서 변경 될 것입니다하지만 지금의로, 최대, 최소는 샤딩 주로 내부적으로 인덱스 키를 사용할 수 있습니다.

    http://www.mongodb.org/display/DOCS/min+and+max+Query+Specifiers 참조

    불행하게도 최대 값을 얻을 수있는 지금 유일한 방법을 그 값의 컬렉션을 내림차순 정렬하고 첫 번째 걸릴 것입니다.

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

    2.잔인한 수도 정렬. 당신은에 의해 그룹을 할 수

    잔인한 수도 정렬. 당신은에 의해 그룹을 할 수

    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** }
                });
    
  3. ==============================

    3.

    db.collectionName.aggregate(
      {
        $group : 
        {
          _id  : "",
          last : 
          {
            $max : "$sellprice"
          }
        }
      }
    )
    
  4. ==============================

    4.예 집계를 계산하기위한 쉘 코드를 MongoDB를.

    예 집계를 계산하기위한 쉘 코드를 MongoDB를.

    그룹 (많은 응용 프로그램)에 대한 MongoDB를 수동 항목을 참조하십시오 : http://docs.mongodb.org/manual/reference/aggregation/group/#stage._S_group

    아래에서 $가 컬렉션의 키와 목표 변수로 바르 대체합니다.

    db.activity.aggregate( 
      { $group : {
          _id:"$your_collection_key", 
          min: {$min : "$your_target_variable"}, 
          max: {$max : "$your_target_variable"}
        }
      } 
    )
    
  5. ==============================

    5.사용 골재 () :

    사용 골재 () :

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

    6.그것은 당신의 요구 사항에 따라 작동합니다.

    그것은 당신의 요구 사항에 따라 작동합니다.

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

    7.컬럼의 인덱스 다음 정렬을 확인해야하는 경우, 가정 몽고은 정렬 된 집합을 얻기 위해 인덱스를 사용합니다. 그렇지 않으면 볼 수있는 가장 큰 값의 메모를 유지 컬렉션을 반복하는 것이 더 효율적입니다. 예를 들면

    컬럼의 인덱스 다음 정렬을 확인해야하는 경우, 가정 몽고은 정렬 된 집합을 얻기 위해 인덱스를 사용합니다. 그렇지 않으면 볼 수있는 가장 큰 값의 메모를 유지 컬렉션을 반복하는 것이 더 효율적입니다. 예를 들면

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

    (사과는 내 루비의 비트 끈적 끈적, 나는 오랫동안 그것을 사용하지 않은 경우 -하지만 일반적인 접근 방식은 코드에서 명확해야한다.)

  8. ==============================

    8.나는 (내 _id가 정렬입니다 가정) 최대 _id를 얻을 수 원한다면 내가 루비 드라이버를 (필자는 바닥에 MongoDB를 - 루비 태그를 보았다)를 사용하여 한 가정, 나는 다음과 같은 일을 할 것입니다. 내 구현에서는, 내 _id는 정수이었다.

    나는 (내 _id가 정렬입니다 가정) 최대 _id를 얻을 수 원한다면 내가 루비 드라이버를 (필자는 바닥에 MongoDB를 - 루비 태그를 보았다)를 사용하여 한 가정, 나는 다음과 같은 일을 할 것입니다. 내 구현에서는, 내 _id는 정수이었다.

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

    컬렉션의 최소 _id를 얻으려면, 단지 변화 : 제품 설명에 : ASC

  9. ==============================

    9.다음 쿼리는 같은 일을 :     db.student.find ({}, { "_ID '1}) 분류 (_ {ID : -1}).. 한계 (1)

    다음 쿼리는 같은 일을 :     db.student.find ({}, { "_ID '1}) 분류 (_ {ID : -1}).. 한계 (1)

    나를 위해,이 결과 다음과 같은 생산 : {: NumberLong으로 (10934) "_id"}

  10. from https://stackoverflow.com/questions/4762980/getting-the-highest-value-of-a-column-in-mongodb by cc-by-sa and MIT license