2016-03-23 6 views
3

私はmongoDBコレクションで検索したいIDのリストを持っています。

以下のコードは正常に動作しますが、各IDに対して複数のDB呼び出しがあり、ハードコードなしで配列リストを渡すことはできません。

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

しかし、私は、動的に@listは二つの要素が含まれ、この

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

のようなもののIDを渡したい:

私は、動的に渡すことで、この作業を行うことができますどのように
[ 
    '56de679ce64cfa37a61b94f3', 
    '56d533dee64cfa2a970b2631' 
] 

をidsの配列?

答えて

2

配列ref内のものがMongoDB :: OIDオブジェクトである必要がある場合は、それらを作成する必要があります。

mapを使用すると、動的に行うことができます。ループはforeachループのようです。 MongoDBの_map_reduce内のマップは同じことです。 Perlの反復子変数は$_です。

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

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

私はMongoDB :: OID-> new(value => $ _)を実行するたびにDB呼び出しがあると感じます。私は情報を取得するために単一のDB呼び出しで何かを探していました。それは可能ですか? –

+0

@Babu私は恐れているとは思わない。 MongoDBを使用したことはありません。ドキュメントをチェックしたり、コードを読む必要があります(metacpan.orgでこれを行うことができます)。それ以外の場合は、新しい質問をしてください。 – simbabque

+0

どうもありがとうございました。これはすぐに問題を解決します:-) –

関連する問題