sql >> データベース >  >> NoSQL >> MongoDB

MongoDbはPHPでクエリに参加します

    そのために集約パイプラインを使用できます

    1. $ lookupを使用します 2つのコレクションに参加するには、
    2. $ unwind $ lookupからの結果の配列 ステージ
    3. $ match 正規表現検索を行うには

    regexを実行する必要がある場合 titleで検索 masterの ドキュメントにも、それを$またはに追加できます $ matchのクエリ ステージ、そしてそれを望まない場合は、$またはクエリから削除することを忘れないでください(私はそれを追加しました)。

    $pipeline = array(
        array(
            '$lookup' => array(
                'from' => 'masters',
                'localField' => '$master_id',
                'foreignField' => '$_id',
                'as' => 'master'
            )
        ),
        array(
            '$unwind' => Array(
                'path' => '$master',
                'preserveNullAndEmptyArrays' => true
             ) 
        ),
        array(
            '$match' => array(
                '$or' => array(
                    array(
                        'title' => new \MongoDB\BSON\Regex($queryString),
                    ),
                    array(
                        'description' => new \MongoDB\BSON\Regex($queryString),
                    ),
                    array(
                        'master.title' => new \MongoDB\BSON\Regex($queryString),
                    ),
                )
            )
        ),
        array(
            '$sort' => array(
                'field_name' => 1
            )
        ),
        array(
            '$limit' => 10
        )
    )
    
    $results = $details->aggregate($pipeline);
    

    さて、私のphpはそれほど素晴らしいものではありませんが、それでも私はあなたのためにクエリを書くことができました。必要に応じてコードを変更・修正してください。

    問題は、これを達成する方法についてのアイデアをあなたに与えたことです。お役に立てば幸いです。

    編集

    並べ替えするには 、および limit $sort を使用します および $ limit パイプラインステージ、私は答えにそれを追加しました。

    field_nameを置き換えることを忘れないでください 結果を並べ替える実際のフィールドを使用します。




    1. MongoDBは、比較操作を使用してsudocumentsから個々のカウントを取得します

    2. マングースのアップサートはデフォルトのスキーマプロパティを作成しません

    3. 配列のMongoDBページ付け-$sliceが配列の先頭に到達したかどうかを確認します

    4. WindowsでのMongoDBの構成