如何比较Meteor查找中的字段

时间:2014-10-25 11:02:22

标签: meteor

在流星查找查询中,如何比较两个字段?我想做类似以下SQL查询的事情。

select * from games g where g.game_minutes > (minutes_since_midnight_now - g.game_duration)

鉴于以下答案,我在比较两个领域的过程中做了一些实验:

这有效:

      var nextGame = Games.findOne(
              {
               game_minutes: {$gt: minutesSinceMidnight},
               court_id: court,
               game_date: {$gt: yesterday}
              },
              {
               sort: {game_minutes: 1}
              }
              );

这不起作用:

      var nextGame = Games.findOne(
              {
               $where: "this.game_minutes" > minutesSinceMidnight, 
               court_id: court,
               game_date: {$gt: yesterday}
              },
              {
               sort: {game_minutes: 1}
              }
              );

最终我想要这样的事情:

$where: "this.game_minutes" > (minutesSinceMidnight - "this.game_duration"), 

2 个答案:

答案 0 :(得分:2)

games.find({game_minutes: {$gt: minutes_since_midnight_now - g.game_duration}});

如下所示:How to use $min mongo query in Meteor.js?

更新:要比较文档的两个属性,您必须使用games.find({$where: "this.game_minutes > minutes_since_midnight_now - this.game_duration"})或类似的。

答案 1 :(得分:2)

由于您还没有说明为什么以下内容无效...

var nextGame = Games.findOne(
          {
           $where: "this.game_minutes" > minutesSinceMidnight, 
           court_id: court,
           game_date: {$gt: yesterday}
          },
          {
           sort: {game_minutes: 1}
          }
          );

...我想猜测是因为Mongodb要求$ where子句的字符串或函数。我也猜测你已经尝试过Ayonix在评论中提出的建议,使用......

$where: "this.games_minutes > minutes_since_midnight_now - this.game_duration"

......而且这不起作用。我没有自己尝试,我认为Mongodb没有办法评估什么" minutes_since_midnigt_now"是在执行和解析传递它的$ where字符串时。

然而,$ where似乎也接受了full javascript function,所以也许这会有效:

var nextGame = Games.findOne(
          {
           $where: function () { return this.game_minutes > minutesSinceMidnight - this.game_duration; },

           court_id: court,
           game_date: {$gt: yesterday}
          },
          {
           sort: {game_minutes: 1}
          }
          );

如果这不起作用,也许你可以透露一些更详细的信息,说明当它没有工作时会发生什么?&#34 ;?你看到错误吗?不编译吗?或者它根本不返回任何东西?