我有一个简单的排名计数,我必须这样才能给我的用户一个排名。
这样:
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(...);
查询这样的事情的正确和最快的方法是什么?
答案 0 :(得分:2)
要计算两个术语都为真的文档,请将两个术语放在原始count
调用的相同条件对象中,该对象提供隐式AND查询:
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 );
});