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

アグリゲートのプロジェクションで$elemMatchを使用するにはどうすればよいですか?

    かなり古い質問ですが、文字通り提案された答えはどれも良いものではありません。

    TLDR

    $projectステージで$elemMatchを使用することはできません。ただし、$filterなどの他の集計演算子を使用しても同じ結果を得ることができます。

    db.itens.aggregate([
        {
            $project: {
                compList: {
                   $filter: {
                    input: "$complist",
                    as: "item",
                    cond: {$eq: ["$$item.a", 1]}
                   }
                }
            }
        }
    ])
    

    また、$ elemMatchと同様に条件に一致する配列の最初の項目だけが必要な場合は、$ arrayElemAt

    を組み込むことができます。

    詳細な説明

    まず、$ elemMatchについて理解しましょう:

    $ elemMatchはクエリ式ですが、このプロジェクションバージョンも存在します。これは、$project集約ステージではなくクエリプロジェクションを参照します。

    だから何?これは何かと何の関係がありますか? $ projectステージには特定の入力構造がありますが、使用したいのは次のとおりです。

    <フィールド>:<式>

    有効な式とは何ですか?

    式には、フィールドパス、リテラル、システム変数、式オブジェクト、および式演算子を含めることができます。式はネストできます。

    したがって、式演算子を使用したいのですが、ドキュメントの$elemMatchからわかるように その一部ではありません。したがって、集計$projectで使用するのは有効な式ではありません。 ステージ。



    1. SpringBoot用のEmbeddedRedis

    2. mongorestoreは、個別の引数ではなく、単一のurl引数を取ることができますか?

    3. redisで独自のデータベースを作成するにはどうすればよいですか?

    4. Mongo更新配列要素(.NETドライバー2.0)