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

配列のサブ配列をいくつかの基準でフィルタリングする

    必要なのは$filter $map内 :

    db.junk.aggregate([
      { "$project": {
        "someArray": {
          "$filter": {
            "input": {
              "$map": {
                "input": "$someArray",
                 "as": "some",
                 "in": {
                   "subId": "$$some.subId",
                   "subArray": {
                     "$filter": {
                       "input": "$$some.subArray",
                       "as": "sub",
                       "cond": { "$ne": [ "$$sub.filterMe", "YES" ] }
                     }
                   }
                 }
              }
            },
            "as": "some",
            "cond": { "$gt": [ { "$size": "$$some.subArray" }, 0 ] }
          }
        }
      }}
    ])
    

    生産物:

    {
            "_id" : "someId",
            "someArray" : [
                    {
                            "subId" : 1,
                            "subArray" : [
                                    {
                                            "field1" : "A",
                                            "filterMe" : "NO"
                                    }
                            ]
                    },
                    {
                            "subId" : 2,
                            "subArray" : [
                                    {
                                            "field1" : "D",
                                            "filterMe" : "NO"
                                    }
                            ]
                    }
            ]
    }
    

    私は実際にそれを追加の$filterでラップします someArrayを削除します フィルタリングされたsubArrayのエントリ 結果として空になってしまいました。マイレージは、それがあなたのやりたいことによって異なる場合があります。




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

    2. ノードredis、変数はクライアント間で共有されますか?

    3. 照合機能をサポートするためにMongoDBクエリに引数を手動で指定する(大文字と小文字を区別しないインデックスの場合)

    4. MongoDBにコレクションが存在することを確認してください