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

Jak vybrat vnořené dokumenty pomocí MongoDB

Trochu pozdě na párty, ale snad to pomůže ostatním, kteří hledají řešení. Našel jsem způsob, jak toho dosáhnout pomocí agregačního rámce a kombinací $project a $unwind s $match tím, že je zřetězím dohromady. Udělal jsem to pomocí PHP, ale měli byste získat podstatu:

    $ops = array(
        array('$match' => array(
                'collectionColumn' => 'value',
            )
        ),
        array('$project' => array(
                'collection.subcollection' => 1
            )
        ),
        array('$unwind' => '$subCollection'),
        array('$match' => array(
                subCollection.subColumn => 'subColumnValue'
            )
        )
    );

První shoda a projekt se používají pouze k odfiltrování, aby to bylo rychlejší, a poté uvolnění na podsbírce vyplivne každou položku podkolekce po položce, kterou lze filtrovat pomocí poslední shody.

Doufám, že to pomůže.

AKTUALIZACE (od Ryana Whealea):

Poté můžete $group data zpět do původní struktury. Je to jako mít $elemMatch který vrací více než jeden vnořený dokument:

array('$group' => array(
        '_id' => '$_id',
        'subcollection' => array(
            '$push' => '$subcollection'
        )
    )
);

Přeložil jsem to z Node do PHP, takže jsem v PHP netestoval. Pokud někdo chce verzi Node, zanechte níže komentář a já mu vyhovím.



  1. ClusterControl – všechny hlavní funkce a vylepšení od roku 2017

  2. Převod binárního _id mongodb na LUUID pomocí uzlu

  3. Jak odladit chybový příkaz OOM není povolen při použití paměti> 'maxmemory' v Redis?

  4. socket.io redis a únik paměti