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

一致する配列要素を選択し、選択したフィールドを返します

    返す配列の特定のフィールドのみを選択したい場合は、ドキュメントの「再形成」について話していることになります。 「基本的な」フィールドの選択以外の場合、これは .aggregate() .find()の代わりにメソッドとして

    したがって、ここでの2つの要件は、 $filterです。 配列のコンテンツを「照合」して返すとともに、 $map 配列自体からの実際の「返すフィールド」:

    User.aggregate([
      { "$match": { "children.name": "def" } },
      { "$project": {
         "name": 1,
         "children": {
           "$map": {
             "input": {
               "$filter": {
                 "input": "$children",
                 "as": "c",
                 "cond": { "$eq": [ "$$c.name", "def" ] } 
               }
             },
             "as": "c",
             "in": {
               "age": "$$c.age",
               "height": "$$c.height"
             }
           }
         }
      }}
    ])
    

    ここで $filter 配列の内容を条件に一致するものだけに減らすために使用されます。同じ"name"を持つものであること 値としてのプロパティ"def" 。これは、"input"として渡されます。 $mapへのパラメーター

    $map 演算子は、"in"で指定した内容に従って何かを返すように「配列を再形成」するという点で、他の言語と同じように機能します。 パラメータ。したがって、ここでは実際にはプロパティに明示的に名前を付け、処理中の現在の配列要素に変数の割り当てを使用して、これらが「新しい」配列コンテンツとして返されるようにします。

    全体的な結果は、次を含む配列になります。

    1. 指定された条件に一致するアイテムのみ。
    2. 返されるように指定されたフィールドのみ。



    1. mongodbの合計値を平均する方法は?

    2. 本文、mongoose / mongodbでドキュメントを提供して、複数のドキュメントを更新します

    3. MongoDBを使用したリポジトリパターン-1つのトランザクションで複数の作業単位

    4. コレクション内の配列からオブジェクトを削除する