0

我想知道是否可以使用 perl MongoDB::Collection 模块从 mongo shell 中使用“in”运算符。我已经尝试了很多东西,但还没有得到我期望的结果。我已经检查了 stackoverflow 上的文档和其他帖子,但似乎找不到任何关于此的具体内容,除非我忽略了某些东西。

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

我通过 mongo shell 运行的计数查询是

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 运算符的唯一其他堆栈溢出帖子是这个$in mongoDB 运算符,perl 中带有 _id建议使用http://api.mongodb.org/perl/current/MongoDB/OID.html但不要认为这在我的示例中是相关的,因为它看起来更多地与 ID 相关。

任何帮助或讨论将不胜感激。

4

1 回答 1

1

问题是该$in子句期望它的值是一个数组引用,但是您向其中提供了一个 hashref(如 Dumper 的输出所示)。将后者变为前者的最简单方法是应用keys函数:

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

... 或者只是[keys $whitelist->methods],如果您使用 Perl 5.14+,则...

从 Perl 5.14 开始,keys可以采用标量 EXPR,它必须包含对 unblessed 哈希或数组的引用

.

于 2013-10-27T15:01:05.877 回答