programing

몽구스JS - 최대값을 가진 요소를 찾는 방법은 무엇입니까?

newsource 2023. 6. 19. 21:36

몽구스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