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

MongoDBでサブドキュメントを選択する方法

    パーティーに少し遅れましたが、うまくいけば、解決策を探している他の人を助けるでしょう。集約フレームワークを使用し、$projectと$unwindを$matchと組み合わせて、それらをチェーン化することにより、これを行う方法を見つけました。 PHPを使用して実行しましたが、要点を理解する必要があります:

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

    最初の一致とプロジェクトは、フィルターで除外して高速化するために使用されます。次に、サブコレクションでアンワインドすると、各サブコレクションがアイテムごとに吐き出され、最終的な一致を使用してフィルター処理できます。

    お役に立てば幸いです。

    更新(Ryan Whealeから):

    その後、$groupを実行できます データを元の構造に戻します。 $elemMatchを持っているようなものです 複数のサブドキュメントを返します:

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

    これをNodeからPHPに変換したので、PHPでテストしていません。誰かがノードバージョンを望んでいるなら、下にコメントを残してください、そして私は義務付けます。



    1. Dockerを使用してRedisでSpringBootWebアプリを構成する方法

    2. 地理空間情報をmongoDBに保存する方法

    3. 文字列から日付データ型に変換する方法は?

    4. 顕著には、MapReduceのの特長 - のMapReduceの重要性を