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

条件付きのMongoDBプロジェクト配列ドキュメントサイズ

    少なくともMongoDBv3.4.4が必要です

    投影"array.a": 1 ["A", "A", "A"]を返します 。array フィールドは配列であるため、$mapを使用する必要があります 反復の演算子。

    オブジェクトキーを反復処理するには、$objectToArrayを使用して配列に変換する必要があります。 オペレーター。

    "c": {                   "c": [
        "x": true,             {k: "x", v: true},
        "y": true,       ->    {k: "y", v: true},
        "z": false             {k: "z", v: false},
      }                      ]
    

    次に、$filterを適用します k:vだけを取得する演算子 vのペア trueです 。

    db.collection.aggregate([
      {
        $match: {}
      },
      {
        $project: {
          array: {
            $map: {
              input: "$array",
              as: "arr",
              in: {
                a: "$$arr.a",
                b: "$$arr.b",
                c: {
                  $size: {
                    $filter: {
                      input: {
                        $objectToArray: {
                          $ifNull: [
                            "$$arr.c",
                            {}
                          ]
                        }
                      },
                      cond: {
                        $eq: [
                          "$$this.v",
                          true
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    ])
    

    MongoPlayground




    1. NodeJsアプリケーションとモジュール間でMongodbへの接続を適切に再利用する方法

    2. MongoDBでコンソールをクリアする方法

    3. mongoDBでサブドキュメントに挿入

    4. C#を使用したMongoDBの複数レベルのネストされた配列のクエリ、フィルタリング、更新