sql >> Databáze >  >> NoSQL >> MongoDB

MongoDb Připojit dotaz s PHP

K tomu můžete použít agregační kanál

  1. Použijte $lookup připojit se ke dvěma sbírkám,
  2. $unwind výsledné pole z $lookup etapa
  3. $match k vyhledání regulárního výrazu

Pokud potřebujete provést regex hledat podle title z master dokument, můžete jej přidat do $or dotaz na $match fázi, a pokud to nechcete, nezapomeňte odstranit z dotazu $or (přidal jsem to).

$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);

Nyní můj php není tak skvělý, přesto se mi podařilo napsat dotaz pro vás. Změňte/upravte kód podle svých potřeb.

Jde o to, že jsem ti dal nápad, jak toho dosáhnout. Doufám, že to pomůže.

Upravit

Chcete-li sort a limit , použijte $sort a $limit fáze potrubí, přidal jsem to v odpovědi.

Nezapomeňte nahradit field_name se skutečným polem, podle kterého chcete výsledek seřadit.




  1. Redis:Roztřiďte a získejte n sousedských klíčů

  2. Chyba duplicitního klíče MongoDB E11000

  3. MongoDB filtr více dílčích dokumentů

  4. Konverze datových typů v MongoDB