몽구스JS - 최대값을 가진 요소를 찾는 방법은 무엇입니까?
저는 MongoDB, Mongoose를 사용하고 있습니다.JS 및 Nodejs.
다음 필드가 있는 컬렉션(멤버라고 함)이 있습니다.
Country_id, Member_id, 이름, 점수
국가 ID가 = 10인 최대 점수를 가진 회원을 반환하는 쿼리를 작성하고 싶습니다.
Mongoose에서 이에 적합한 문서를 찾을 수 없었습니다.제이에스
스택에서 이걸 찾았어요Overflow(MongoDB 코드)
Model.findOne({ field1 : 1 }).sort(last_mod, 1).run( function(err, doc) {
var max = doc.last_mod;
});
그런데 같은 것을 MongooseJS로 어떻게 번역합니까?
Member
.findOne({ country_id: 10 })
.sort('-score') // give me the max
.exec(function (err, member) {
// your callback code
});
몽구스 문서에서 쿼리를 확인하십시오. 꽤 좋습니다.
동일한 코드를 다시 작성하지 않으려면 다음과 같은 정적 방법을 회원 모델에 추가할 수도 있습니다.
memberSchema.statics.findMax = function (callback) {
this.findOne({ country_id: 10 }) // 'this' now refers to the Member class
.sort('-score')
.exec(callback);
}
그리고 나중에 전화해요.Member.findMax(callback)
이렇게 하려면 Mongoose 문서가 필요하지 않습니다.Plain MongoDb가 그 일을 할 것입니다.
당신이 당신의 것을 가지고 있다고 가정합니다.Member
컬렉션:
{ "_id" : ObjectId("527619d6e964aa5d2bdca6e2"), "country_id" : 10, "name" : "tes2t", "score" : 15 }
{ "_id" : ObjectId("527619cfe964aa5d2bdca6e1"), "country_id" : 10, "name" : "test", "score" : 5 }
{ "_id" : ObjectId("527619e1e964aa5d2bdca6e3"), "country_id" : 10, "name" : "tes5t", "score" : -6 }
{ "_id" : ObjectId("527619e1e964aa5d2bdcd6f3"), "country_id" : 8, "name" : "tes5t", "score" : 24 }
다음 쿼리는 찾고 있는 문서로 커서를 반환합니다.
db.Member.find({country_id : 10}).sort({score : -1}).limit(1)
사용하는 것이 더 빠를 수 있습니다.find()
보다findOne()
.
와 함께find().limit(1)
하나의 문서 배열이 반환됩니다.문서 개체를 가져오려면 첫 번째 배열 요소를 가져와야 합니다.maxResult[0]
.
살바도르의 답변을 보다 완벽하게 만드는 것은...
var findQuery = db.Member.find({country_id : 10}).sort({score : -1}).limit(1);
findQuery.exec(function(err, maxResult){
if (err) {return err;}
// do stuff with maxResult[0]
});
Mongoose 쿼리 도우미를 사용하면 쉽고 빠르게 실행할 수 있습니다.
이에 대한 일반적인 형식은 다음과 같습니다.
<Your_Model>.find()
.sort("-field_to_sort_by")
.limit(1)
.exec( (error,data) => someFunc(error,data) {...} );
tldr: 'field_to_sort_by'에서 가장 높은 값을 가진 단일 항목의 배열을 제공합니다.제가 한 시간 동안 했던 것처럼 데이터[0]로 액세스하는 것을 잊지 마십시오.
장황한 바람:함수 문자열이 수행하는 작업에 대한 단계별...
Your_Model.find()
쿼리를 시작합니다. 인수가 필요하지 않습니다.
.sort("-field_to_sort_by")
모든 항목을 내림차순으로 정렬합니다.필드 이름 앞에 있는 빼기 기호는 내림차순으로 정렬하도록 지정하며, 필드 이름을 삭제하여 오름차순으로 정렬하여 최소값을 가진 문서를 가져올 수 있습니다.
.limit(1)
데이터베이스는 최상위 문서만 원하므로 첫 번째 문서만 반환하도록 지시합니다.
.exec( (error,data) => someFunc(error,data) {...} )
마지막으로 오류 및 문서가 포함된 배열을 에 전달합니다.다음에서 문서를 찾을 수 있습니다.data[0]
사용할 수도 있습니다.$max
연산자:
// find the max age of all users
Users.aggregate(
{ $group: { _id: null, maxAge: { $max: '$age' }}}
, { $project: { _id: 0, maxAge: 1 }}
, function (err, res) {
if (err) return handleError(err);
console.log(res); // [ { maxAge: 98 } ]
});
언급URL : https://stackoverflow.com/questions/19751420/mongoosejs-how-to-find-the-element-with-the-maximum-value
'programing' 카테고리의 다른 글
VueJS - VueX : 비동기 프로세스 후 알림 표시 (0) | 2023.06.19 |
---|---|
MySQL/Connector C 라이브러리를 사용하는 C 애플리케이션은 메모리를 매우 빠르게 소비합니다. (0) | 2023.06.19 |
원시 KNEX 문을 사용하여 MariaDB에서 데이터 추출 (0) | 2023.06.19 |
문자열의 단어 바꾸기 - 루비 (0) | 2023.06.19 |
투영이 db.collection에서 작동하지 않습니다.몽고에서 발견하다 (0) | 2023.06.19 |