我正在尝试使用 MongoDB Perl 驱动程序对具有这种文档结构的集合进行查询:
{
"_id" : ObjectId("519fcfa59fb9d97874000001"),
"variant" : {
"alt" : "T",
"ref" : "C",
"chr" : NumberLong(1),
"pos" : NumberLong(13302),
"rsID" : "rs180734498"
},
"genotype" : {
"GT" : "0/0"
},
"sample" : {
"ID" : NumberLong(8751),
"tags" : [
"hiseq",
"exome",
NumberLong(8751)
]
}
}
这是我的 BAD perl 代码片段:
my $hom_count = $exomevars->count({
'$and' => [ {
"variant.chr" => $chr,
"variant.pos" => $pos,
"variant.ref" => $ref,
"variant.alt" => $alt,
"genotype.GT" => qr/1\/1/,
"sample.tags" => { '$nin' => \@these_tags }
} ]
});
我的收藏确实在这些字段上编入索引 -
{
"v" : 1,
"key" : {
"variant.chr" : 1,
"variant.pos" : 1,
"variant.ref" : 1,
"variant.alt" : 1,
"genotype.GT" : 1,
"sample.tags" : 1
},
"ns" : "vars.exomevars",
"name" : "variant.chr_1_variant.pos_1_variant.ref_1_variant.alt_1_genotype.GT_1_sample.tags_1"
}
...但是我的脚本挂起并且没有查询发生。我很确定这是我的问题是查询的 $nin/sample.tags 部分,如果我取出我的 \@these_tags 并硬编码一些这样的文本,它仍然没有查询就挂起......
"sample.tags" => { '$nin' => ["stuff","things"] },
还要确保我的 @these_tags 数组正在使用 Data::Dumper - 看来我做对了......
print Dumper \@these_tags;
$VAR1 = [
'Please',
'help',
'stackoverflow',
'friends'
];
这不是qr/1\/1/
- 我以前使用过这个查询,它工作正常。例如,这是脚本的早期版本,我仅尝试基于单个字符串进行排除,此查询效果很好:
my $hom_count = $exomevars->count({
'$and' => [ {
"variant.chr" => $chr,
"variant.pos" => $pos,
"variant.ref" => $ref,
"variant.alt" => $alt,
"genotype.GT" => qr/1\/1/,
"sample.ID" => { '$ne' => $this_sample }
} ]
});
只有当我将sample.tags
数组添加到集合中,现在尝试$nin
操作符时,whelp,我迷路了......
我试过取出整个 $and 子句,仍然没有。我在 4 节点分片设置和 MongoDB-0.700.0 perl 驱动程序上使用 MongoDB v2.4.3。
关于我哪里出错的任何指示?我应该提供任何其他信息吗?
提前谢谢了!!