うーん、SQLの方法でそれを行うためのあなたのrtying:
foreach($mongoIdArray as $seprateIds){
$newMongoString .= new MongoId($seprateIds).', ';
}
$mongoIdArray = explode(',', $newMongoString).'0';
代わりに試してください:
$_ids = array();
foreach($mongoIdArray as $seprateIds){
$_ids[] = $serprateIds instanceof MongoId ? $seprateIds : new MongoId($seprateIds);
}
$thisSearch = $collection->find(array(
'relatedMongoID' => array( '$in' => $_ids)
));
ObjectId
これにより、そのフィールドの検索に使用できる のリストが生成されるはずです - relatedMongoID
。
これが私がしていることです
基本的に、ドキュメント ( https://docs.mongodb.org/v3.0/reference/operator/query/in/ ) に示されているように、 $in
MongoDB のオペレーターは実際には配列を取るため、PHP でこの構造を複製する必要があります。 PHPドライバーは、ほとんどの面でドキュメントを備えた1対1です(追加のオブジェクトを使用する必要がある一部の領域を除く、たとえばMongoRegex
:)
さて、_id
MongoDB のすべての s は実際にはObjectId
s であるため (構造を変更しない限り)、このクエリを完了するために必要なことはObjectId
s の配列を作成することです。ObjectId
PHPはMongoId
( http://php.net/manual/en/class.mongoid.php )
したがって、s の配列を作成する必要がありますMongoId
。
array_walk
最初に、各配列要素の値をMongoId
、そのオブジェクトにカプセル化された古い値を持つに変更して、配列を調べます ( で実行できます)。
foreach($mongoIdArray as $seprateIds){
$_ids[] = $serprateIds instanceof MongoId ? $seprateIds : new MongoId($seprateIds);
}
ここで三項演算子を使用して、値が既にMongoId
カプセル化された値であるかどうかを確認し、そうでない場合はカプセル化します。
次に、この新しい配列をクエリ オブジェクトに追加して$in
、MongoDB のメイン ドキュメントに示されているようにクエリ配列を作成します。
$thisSearch = $collection->find(array(
'relatedMongoID' => array( '$in' => $_ids)
));
したがって、クエリがサーバーに送信されると、次のような構造が形成されます。
{relatedMongoId: {$in: [ObjectId(''), ObjectId('')]}}
結果が返されます。