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",...]}}}}, 

} 

나중에 그룹 그것에게 당신이 그것을 수행 한 방법입니다.