如何在没有硬编码的情况下动态提供列表到MongoDB的$ in?

时间:2016-03-23 12:50:37

标签: perl mongodb-query

我有一个我想在mongoDB集合中搜索的ID列表。

下面的代码工作正常,但是每个id都有多个DB调用,没有硬编码我无法传递数组列表。

$db->$collection->find( {
"_id" => { 
    '$in' => [ MongoDB::OID->new( value => "56de679ce64cfa37a61b94f3" ), 
               MongoDB::OID->new( value => "56d533dee64cfa2a970b2631" )
             ]
         } 
} );

但我想动态传递id,就像这样

$db->$collection->find( {
    "_id" => { 
               '$in' => [  @list   ]
             } 
 } );

其中@list包含两个元素:

[
  '56de679ce64cfa37a61b94f3',
  '56d533dee64cfa2a970b2631'
]

如何通过传递动态数组的ID来完成这项工作?

1 个答案:

答案 0 :(得分:2)

如果数组ref中的那些东西需要是MongoDB :: OID对象,则需要创建它们。

您可以使用map动态执行此操作。它就像一个foreach循环。你应该熟悉它,因为MongoDB中_map_reduce中的 map 是一回事。 Perl中的迭代器变量是$_

my @list = (
  '56de679ce64cfa37a61b94f3',
  '56d533dee64cfa2a970b2631',
);

$db->$collection->find( {
    "_id" => { 
               '$in' => [  map { MongoDB::OID->new( value => $_ ) } @list   ]
             } 
 } );