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了吗?