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
'code' 카테고리의 다른 글
여러 레코드를 삽입하고 ID 값을 얻는 방법은 무엇입니까? (0) | 2023.07.02 |
---|---|
v-for(vue.js)에서 데이터를 읽는 방법은 무엇입니까? (0) | 2023.07.02 |
openapi springboot generator jacksonno String-인수 생성자/공장 메서드에서 문자열 값을 역직렬화합니다. (0) | 2023.07.02 |
두 행 간의 시간 차이 계산 (0) | 2023.06.27 |
mongo 집계 쿼리에서 $project를 사용하여 필드를 최상위 문서로 반환할 수 있습니까? (0) | 2023.06.27 |