0

通常、関連するIDを1つ検索するときは、次のようにします。

$thisSearch = $collection->find(array(
    'relatedMongoID' => new MongoId($mongoIDfromSomewhereElse)
));

このようなことをしたい場合はどうすればよいですか?

$mongoIdArray = array($mongoIDfromSomewhereElseOne, $mongoIDfromSomewhereElseTwo, $mongoIDfromSomewhereElseThree);
$thisSearch = $collection->find(array(
        'relatedMongoID' => array( '$in' => new MongoId(mongoIdArray)
    )));

新しいMongoId()を使用して、または使用せずに試してみましたが、運が悪かったので試してみました。

foreach($mongoIdArray as $seprateIds){

$newMongoString .= new MongoId($seprateIds).', ';

}
$mongoIdArray = explode(',', $newMongoString).'0';

各_idで新しいMongoID()を実行する必要がある場合、「$ in」「_id」を検索するにはどうすればよいですか?

4

2 に答える 2

8

うーん、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('')]}}

結果が返されます。

于 2013-02-05T08:16:01.913 に答える