2015-11-03 2 views
1

У меня есть простой рейтинг, который я должен сделать, чтобы дать моему пользователю звание.Как я могу подсчитать пользователей в мангусте, у которых есть конкретные критерии?

выглядит следующим образом:

this.model('User').count({'myClub.scoreStamp': {'$gt':this.myClub.scoreStamp}}).exec(function(err,countNum){ 
      rankToReturn = countNum + 1; 
      console.log('rankToReturn',rankToReturn); 
      deferred.resolve(rankToReturn); 
     }); 

где scoreStamp это баллы, что выглядит следующим образом: 4,14, 3,11 и так далее.

Я хочу добавить к этому запросу еще одно поле и проверить что-то вроде этого: Подсчитайте всех пользователей, у которых есть один и тот же параметр X, дайте мне мой рейтинг среди них, мне интересно, что является самым быстрым способом сделать это :

Должен ли я сделать находку первым, а затем рассчитывать ?, как это:

this.model('User').find({'myClub.club':12345678}).count({'myClub.scoreStamp': {'$gt':this.myClub.scoreStamp}}).exec(function(err,countNum){ 
       rankToReturn = countNum + 1; 
       console.log('rankToReturn',rankToReturn); 
       deferred.resolve(rankToReturn); 
      }); 

Или это можно сделать что-то вроде этого:

this.model('User').count({'$and':{'myClub.scoreStamp': {'$gt' : this.myClub.scoreStamp} }}).exec(...); 

Wha t является правильным и самым быстрым способом запросить такую ​​вещь?

ответ

2

Для подсчета документов, где оба члена истинен, положить оба термин в тот же условиях объекта исходного count вызова, который обеспечивает неявный и запрос:

this.model('User').count({ 
    'myClub.club':12345678, 
    'myClub.scoreStamp': {'$gt':this.myClub.scoreStamp} 
}).exec(function(err,countNum){ 
    rankToReturn = countNum + 1; 
    console.log('rankToReturn',rankToReturn); 
    deferred.resolve(rankToReturn); 
}); 
Смежные вопросы