mongodb 컬렉션에서 최대 가치를 얻는 방법
다음과 같은 mongodb 컬렉션이 있습니다.
db.kids.find()
//results
[
{name:'tom', age:10},
{name:'alice', age:12},
....
]
SQL에서와 같이이 컬렉션에서 MAX 'age'를 얻으려면 쿼리가 필요합니다. SELECT MAX(age) FROM kids WHERE 1
의견 중 하나로 :
db.collection.find().sort({age:-1}).limit(1) // for MAX
db.collection.find().sort({age:+1}).limit(1) // for MIN
완전히 사용할 수 있지만 성능이 확실하지 않습니다.
제안 된 답변의 성능이 좋습니다. MongoDB 문서 에 따르면 :
$ sort가 $ limit 바로 앞에 오면 옵티마이 저는 $ limit를 $ sort로 통합 할 수 있습니다. 이렇게하면 정렬 작업이 진행될 때 상위 n 개의 결과 만 유지할 수 있습니다 . 여기서 n은 지정된 제한 이고 MongoDB는 메모리에 n 개의 항목 만 저장하면됩니다.
버전 4.0에서 변경되었습니다.
그래서의 경우
db.collection.find().sort({age:-1}).limit(1)
우리는 가장 높은 요소를 얻을 없이 때문에 언급 한 최적화의 컬렉션을 정렬.
집계 프레임 워크 사용은 어떻습니까?
db.collection.aggregate({ $group : { _id: null, max: { $max : "$age" }}});
여러분은 계획을 실행하여 최적화 프로그램이 무엇을하는지 알 수 있습니다. 계획을 살펴 보는 일반적인 형식은 MongoDB 문서 에서 가져온 것 입니다. 즉 Cursor.plan (). 정말로 더 깊이 파고 싶다면 cursor.plan (true)을 통해 자세한 내용을 확인할 수 있습니다.
인덱스가있는 경우 db.col.find (). sort ({ "field":-1}). limit (1)은 인덱스가 기본 오름차순이고 원하는 경우에도 하나의 인덱스 항목을 읽습니다. 컬렉션의 최대 항목과 하나의 값.
즉, @yogesh의 제안이 정확합니다.
감사합니다-Sumit
그룹 및 최대를 사용할 수 있습니다.
db.getCollection('kids').aggregate([
{
$group: {
_id: null,
maxQuantity: {$max: "$age"}
}
}
])
간단한 설명, 아래와 같은 몽고 쿼리 응답 이 있고 Array-> "Date" 에서 가장 높은 값만 원하면
{
"_id": "57ee5a708e117c754915a2a2",
"TotalWishs": 3,
"Events": [
"57f805c866bf62f12edb8024"
],
"wish": [
"Cosmic Eldorado Mountain Bikes, 26-inch (Grey/White)",
"Asics Men's Gel-Nimbus 18 Black, Snow and Fiery Red Running Shoes - 10 UK/India (45 EU) (11 US)",
"Suunto Digital Black Dial Unisex Watch - SS018734000"
],
"Date": [
"2017-02-13T00:00:00.000Z",
"2017-03-05T00:00:00.000Z"
],
"UserDetails": [
{
"createdAt": "2016-09-30T12:28:32.773Z",
"jeenesFriends": [
"57edf8a96ad8f6ff453a384a",
"57ee516c8e117c754915a26b",
"58a1644b6c91d2af783770b0",
"57ef4631b97d81824cf54795"
],
"userImage": "user_profile/Male.png",
"email": "roopak@small-screen.com",
"fullName": "Roopak Kapoor"
}
],
},
*** 그런 다음 추가했습니다
Latest_Wish_CreatedDate : {$ max : "$ Date"},
아래와 같은 것-
{
$project : { _id: 1,
TotalWishs : 1 ,
wish:1 ,
Events:1,
Wish_CreatedDate:1,
Latest_Wish_CreatedDate: { $max: "$Date"},
}
}
최종 쿼리 응답은 다음과 같습니다.
{
"_id": "57ee5a708e117c754915a2a2",
"TotalWishs": 3,
"Events": [
"57f805c866bf62f12edb8024"
],
"wish": [
"Cosmic Eldorado Mountain Bikes, 26-inch (Grey/White)",
"Asics Men's Gel-Nimbus 18 Black, Snow and Fiery Red Running Shoes - 10 UK/India (45 EU) (11 US)",
"Suunto Digital Black Dial Unisex Watch - SS018734000"
],
"Wish_CreatedDate": [
"2017-03-05T00:00:00.000Z",
"2017-02-13T00:00:00.000Z"
],
"UserDetails": [
{
"createdAt": "2016-09-30T12:28:32.773Z",
"jeenesFriends": [
"57edf8a96ad8f6ff453a384a",
"57ee516c8e117c754915a26b",
"58a1644b6c91d2af783770b0",
"57ef4631b97d81824cf54795"
],
"userImage": "user_profile/Male.png",
"email": "roopak@small-screen.com",
"fullName": "Roopak Kapoor"
}
],
"Latest_Wish_CreatedDate": "2017-03-05T00:00:00.000Z"
},
최대 값의 경우 SQL 쿼리를 다음과 같이 작성할 수 있습니다.
select age from table_name order by age desc limit 1
mongodb에서도 같은 방식으로 작성할 수 있습니다.
db.getCollection('collection_name').find().sort({"age" : -1}).limit(1); //max age
db.getCollection('collection_name').find().sort({"age" : 1}).limit(1); //min age
참고 URL : https://stackoverflow.com/questions/32076382/mongodb-how-to-get-max-value-from-collections
'Nice programing' 카테고리의 다른 글
숫자 키패드의 keyCode 값? (0) | 2020.11.16 |
---|---|
Golang에서 http 연결 재사용 (0) | 2020.11.16 |
정규식의 유효성을 어떻게 확인할 수 있습니까? (0) | 2020.11.16 |
구성 변환을 사용하여 ConnectionString을 제거하는 방법 (0) | 2020.11.16 |
div 내에서 두 줄로만 텍스트 감싸기 (0) | 2020.11.16 |