Meteor MongoDB - 从多重排序的游标中获取下一个元素

时间:2014-05-10 22:32:06

标签: mongodb sorting meteor

我创建了从一系列游戏中获取即将推出的游戏的方法。我将当前游戏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它绕过具有相同炒作点但具有最新日期的游戏。

我有什么办法可以说,在游标中获取当前游戏的索引并返回下一个文档。为此,我需要访问此游标的索引,我不知道是否可能。

2 个答案:

答案 0 :(得分:0)

我认为cursor.forEach可以满足您的需求。

http://docs.meteor.com/#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;