0

perl MongoDB::Collection モジュールを使用して、mongo シェルから「in」演算子を使用できるかどうか疑問に思っていました。いろいろ試してみましたが、期待したほどの結果が得られませんでした。ドキュメントやstackoverflowの他の投稿をチェックしましたが、何かを見落としていない限り、これについて具体的には何も見つけられないようです。

http://docs.mongodb.org/manual/reference/operator/query/in/

mongo シェル経由で実行しているカウント クエリは次のとおりです。

mongo:PRIMARY> db.getCollection("Results").count( { TestClass : "TestClass", TestMethod : { $in: ["method1" , "method2", "method3"] } })
181605

リストを配列またはハッシュ参照として渡すか、文字列を事前に作成するいくつかの異なる方法を試しました...

my $count = $mongo->{collection}->count({
                            'TimeStamp'     => { '$gt' => $ft, '$lt' => $tt },
                            'TestClass'     => $TestClass,
                            'TestMethod'    => { '$in' => [$whitelist->methods] },
                            'Result'        => $result
                    });

ダンピング$whitelist->methodsの場所

$VAR1 = {
      'method1' => 1,
      'method2' => 1,
      'method3' => 1
    };

私は答えを求めて高低を見てきましたが、ドライバーが現在このように $in 演算子を使用できるかどうかを知っている人はいますか? 前のクエリから返されたメソッドをループして結果を合計するには、さらに多くのコードが必要になります。

$in 演算子について私が見た他の唯一のスタック オーバーフローの投稿は、http: //api.mongodb.org/perl/current/MongoDB/OID.html の使用を推奨するperl の _id を持つこの $in mongoDB 演算子でしたが、考えないでくださいこれは、ID に関係しているように見えるので、私の例に関連しています。

どんな助けや議論も大歓迎です。

4

1 に答える 1

1

問題は、$in節がその値が配列参照であることを期待しているのに、(Dumper の出力が示すように) ハッシュ参照をそれに指定していることです。後者を前者に変える最も簡単な方法は、keys関数を適用することです:

# ...
'TestMethod'    => { '$in' => [keys %{$whitelist->methods}] }

... または単に[keys $whitelist->methods]、Perl 5.14+ を使用している場合は ...

Perl 5.14keysから、blessed ハッシュまたは配列への参照を含まなければならないスカラー EXPR を取ることができます

.

于 2013-10-27T15:01:05.877 に答える