更新:问题已解决,问题出在显示器前面。我通过测试函数调用了这个,并且两个变量(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文档(例如:https://docs.mongodb.org/v2.6/reference/operator/query/lt/)无济于事。在互联网上搜索也没有产生任何良好的领先优势。
我还尝试了$ where运营商,虽然这显然会对性能产生巨大的劣势(不能使用索引并且必须进行全表扫描),但它也没有工作并完全忽略$ where子句(它选择了符合其他条件的所有文件:
res = Matches.find(
{chr: chr},
{$where: "this.start < endSegment || this.end > startSegment"},
{$or: [
{kit1: kitnoA },
{kit2: kitnoA }
]
});
除了_id
上的系统索引之外,此集合上没有定义索引我很困惑为什么它根本不能用变量工作。使用Meteor版本1.1.0.3,它使用MongoDb版本2.6.7
谢谢大家的帮助