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 v2.4.3 と MongoDB-0.700.0 perl ドライバーを使用しています。
私が間違っていた場所へのポインタはありますか?提供すべき追加情報はありますか?
よろしくお願いします!