在流星查找查询中,如何比较两个字段?我想做类似以下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"),
答案 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 ;?你看到错误吗?不编译吗?或者它根本不返回任何东西?