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

MongoDBを使用してサブドキュメント内の配列をフィルタリングする方法

    aggregateの使用 は正しいアプローチですが、$unwindする必要があります list $matchを適用する前の配列 個々の要素をフィルタリングしてから$groupを使用できるようにします まとめるには:

    db.test.aggregate([
        { $match: {_id: ObjectId("512e28984815cbfcb21646a7")}},
        { $unwind: '$list'},
        { $match: {'list.a': {$gt: 3}}},
        { $group: {_id: '$_id', list: {$push: '$list.a'}}}
    ])
    

    出力:

    {
      "result": [
        {
          "_id": ObjectId("512e28984815cbfcb21646a7"),
          "list": [
            4,
            5
          ]
        }
      ],
      "ok": 1
    }
    

    MongoDB3.2アップデート

    3.2リリース以降、新しい$filterを使用できます listのみを含めることで、これをより効率的に行うための集計演算子 $project中に必要な要素 :

    db.test.aggregate([
        { $match: {_id: ObjectId("512e28984815cbfcb21646a7")}},
        { $project: {
            list: {$filter: {
                input: '$list',
                as: 'item',
                cond: {$gt: ['$$item.a', 3]}
            }}
        }}
    ])
    


    1. nginx/uwsgiサーバー用の永続的なメモリ内Pythonオブジェクト

    2. Mongodbでタイムゾーン設定を使用してクエリを実行する方法

    3. MongoDB $ convert

    4. Python + Memcached:分散アプリケーションでの効率的なキャッシング