我创建了从一系列游戏中获取即将推出的游戏的方法。我将当前游戏ID作为参数包含在内。光标首先按大多数“炒作点”(int)排序,然后从最旧到最新日期排序。
getUpcomingGame: function(current_game_id, skip) {
var current_game_hype = Games.findOne({_id: current_game_id}).hype;
var upcoming_game = Games.find({hype: {$lte: current_game_hype}}, {sort: {hype: -1, submitted: 1}, limit: 10}).fetch()[skip + 1];
// skip: 0) get the next game, skip: 1) get the next-next game and so on..
return upcoming_game._id;
}
要获得下一个最接近的游戏,我可以这样做:Meteor.call('getUpcomingGame',current_game_id,0)。当前游戏与之前的游戏具有相同的“炒作点”时,问题就出现了。如果我使用$ lte,它可以显示当前游戏(作为下一个游戏)。另一方面,如果我使用$ lt它绕过具有相同炒作点但具有最新日期的游戏。
我有什么办法可以说,在游标中获取当前游戏的索引并返回下一个文档。为此,我需要访问此游标的索引,我不知道是否可能。
答案 0 :(得分:0)
我认为cursor.forEach可以满足您的需求。
答案 1 :(得分:0)
您可以尝试迭代游戏阵列并移除与当前游戏匹配的任何内容。
未经测试的代码:
//...
var upcoming_games = Games.find({hype: {$lte: current_game_hype}}, {sort: {hype: -1, submitted: 1}, limit: 10}).fetch();
var upcoming_games_modified = upcoming_games;
upcoming_games.forEach(function(game, index) {
if(game._id === current_game_id)
upcoming_games = upcoming_games_modified.splice(index);
});
return upcoming_games[skip + 1]._id;