Mongodb:$gt和$lt在Javascript(Meteor)中不是';行不通

Mongodb:$gt和$lt在Javascript(Meteor)中不是';行不通,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,更新:问题已解决,问题位于显示器前面。我通过一个测试函数调用了它,两个变量(startSegment和endSegment)都是字符串参数。不知怎的,语法分析没有捕捉到这一点。谢谢大家的帮助 我可以使用正确的答案(两条记录)在MongoDb shell中运行查询,当我将$gt和$lt中使用的值替换为绝对值时,它也可以工作,如本例所示: res = Matches.find( { chr: chr , start: {$lt: 12103392}, end: {$gt: 9

更新:问题已解决,问题位于显示器前面。我通过一个测试函数调用了它,两个变量(
startSegment
endSegment
)都是字符串参数。不知怎的,语法分析没有捕捉到这一点。谢谢大家的帮助

我可以使用正确的答案(两条记录)在MongoDb shell中运行查询,当我将$gt和$lt中使用的值替换为绝对值时,它也可以工作,如本例所示:

res = Matches.find(
  { chr: chr , 
    start: {$lt: 12103392}, 
    end: {$gt: 9381380}, 
    $or: [
      {kit1: kitnoA }, 
      {kit2: kitnoA }
    ]
  });
但是,当我用局部变量替换两个绝对值时,它不会返回单个文档:

res = Matches.find(
  { chr: chr, 
    end: {$gt: startSegment}, 
    start: {$lt: endSegment}, 
    $or: [
      {kit1: kitnoA }, 
      {kit2: kitnoA }
    ]
  });

  res.forEach(function (doc) {
     console.log(JSON.stringify(doc));
  });
我已经检查了MongoDb文档(例如这里:),但没有结果。也在互联网上搜索,因此没有产生任何好的线索

我也尝试过$where操作符,虽然它显然在性能上有很大的缺点(不能使用索引,必须进行完整的表扫描),但它也不起作用,完全忽略了$where子句(它选择了符合其他条件的所有文档:

res = Matches.find( 
  {chr: chr}, 
  {$where: "this.start < endSegment || this.end > startSegment"}, 
  {$or: [
    {kit1: kitnoA }, 
    {kit2: kitnoA }
  ]
});
res=匹配项。查找(
{chr:chr},
{$where:“this.startstartSegment”},
{$or:[
{kit1:kitnoA},
{kit2:kitnoA}
]
});
除了_id上的系统索引外,此集合上没有定义其他索引

我不明白为什么它对变量根本不起作用。使用Meteor版本1.1.0.3,它使用MongoDb版本2.6.7


谢谢大家的帮助

您是否检查了
startSegment
endSegment
是否实际可用,它们是否有价值?是的,我甚至重命名了原始变量
end
start
,因为我认为使用相同的名称会导致问题。这些数字有意义吗?我的意思是,您是否将正确的变量在正确的位置?我知道,我知道,但如果你太累了:)是的,我在上面列出了两个工作示例。一种方法是用实际值替换这两个变量,这样就行了。另一个是mongodshell命令,它也可以工作。我还试着切换两个$lt和$gt语句(这是早期的MongoDb,但3年前),但没有任何区别。到目前为止,我已经花了7个小时在这上面,所以我尝试了所有可能的组合。因此,我可以将它缩小到$lt和$gt语句,并且它与我正在检查的变量有某种关系。我很好奇,如果在meteor应用程序中运行
console.log(Matches.find().count())
,会得到什么。你拿到509了吗?