うーん、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/ ) に示されているように、 $inMongoDB のオペレーターは実際には配列を取るため、PHP でこの構造を複製する必要があります。 PHPドライバーは、ほとんどの面でドキュメントを備えた1対1です(追加のオブジェクトを使用する必要がある一部の領域を除く、たとえばMongoRegex:)
さて、_idMongoDB のすべての s は実際にはObjectIds であるため (構造を変更しない限り)、このクエリを完了するために必要なことはObjectIds の配列を作成することです。ObjectIdPHPは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('')]}}
結果が返されます。