1

を除外し、私は次のようなデータ構造を持っている:MongoDBのクエリ:フィルタとフィールド

{ 
"groups" : [ 
    { 
     "internalName" : "Group1", 
     "fields" : [ 
      { 
       "internalName" : "Field1", 
       "uiProperties" : { 
        "isShow" : true 
       } 
      }, 
      { 
       "internalName" : "Field2", 
       "uiProperties" : { 
        "isHide" : false 
       } 
      } 
     ] 
    }, 
    { 
     "internalName" : "Group2", 
     "fields" : [ 
      { 
       "internalName" : "Field1", 
       "uiProperties" : { 
        "IsHide" : false 
       } 
      } 
     ] 
    } 
], 
"internalName" : "Layout1" 
}, 
{ 
"groups" : [ 
    { 
     "internalName" : "Group3", 
     "fields" : [ 
      { 
       "internalName" : "Field2", 
       "uiProperties" : { 
        "isShow" : true 
       } 
      }, 
      { 
       "internalName" : "Field4", 
       "uiProperties" : { 
        "isHide" : false 
       } 
      } 
     ] 
    }, 
    { 
     "internalName" : "Group4", 
     "fields" : [ 
      { 
       "internalName" : "Field3", 
       "uiProperties" : { 
        "IsHide" : false 
       } 
      } 
     ] 
    } 
], 
"internalName" : "Layout2" 
} 

目標は、フィールド内の名前で、このデータフィルタであり、唯一の必要なデータを返す - 選択された内部名のフィールドだけが含まれているグループのみを。上記のデータと例えば: ろ過内部名 - 「フィールド2」、「フィールド4」 予想されるデータが返される:

{ 
"internalName" : "Layout1", 
"groups" : [ 
    { 
     "internalName" : "Group1", 
     "fields" : [ 
      { 
       "internalName" : "Field2", 
       "uiProperties" : { 
        "isHide" : false 
       } 
      } 
     ] 
    } 
] 
}, 
{ 
"internalName" : "Layout2", 
"groups" : [ 
    { 
     "internalName" : "Group3", 
     "fields" : [ 
      { 
       "internalName" : "Field4", 
       "uiProperties" : { 
        "isHide" : false 
       } 
      } 
     ] 
    } 
] 
} 

は、私はその

{ 
     $match: { 
      "groups.fields.internalName": { 
       $in: ["Field2", "Field4"] 
      } 
     } 
    }, 
    { 
     $unwind: "$groups" 
    }, 
    { 
     $unwind: "$groups.fields" 
    }, 
    { 
     $group: { 
      _id:"$_id", 
      internalName: { 
       $first: "$internalName", 
      },  
      groups:{ 
       $push: { 
         internalName: "$groups.internalName", 
         fields: "$groups.fields" 
       } 
      } 
     } 
    } 

ような何かを試してみてください。しかし、それはうまくいっていません.. あなたはそれを手伝ってもらえますか?

答えて

0

、あなたのアグリゲーションパイプラインのエラー..まず族元素をほどくとフィールド要素

{ 
    {$unwind: "$groups"}, 
    {$unwind: "$groups.fields"}, 
    {$match: {"groups.fields.internalName", {$eq: {$or: ["Field2", "Field4",...]}}}}, 

} 

その後グループ、それはあなたがそれを行っている方法があります。

関連する問題