1

Ich habe folgende Datenstruktur:MongoDB Abfrage: Filter und verstehen sich inklusive Felder

{ 
"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" 
} 

Ziel ist es Filter, diese Daten von Feldern internen Namen und kehren nur Daten benötigt - nur Gruppen, die nur Felder mit ausgewählten internen Namen enthalten . Zum Beispiel mit Daten über: Gefiltert interne Namen - „Field2“, „Field4“ Erwartete Daten zurück:

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

Ich bin versuchen, etwas wie die

{ 
     $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" 
       } 
      } 
     } 
    } 

Aber es ist nicht gut funktioniert .. Kannst du mir dabei helfen?

Antwort

0

Es ist ein Fehler in der Aggregation Pipeline .. zuerst die Gruppenelemente entspannen und dann die Felder Element

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

} 

Später Gruppe es so, wie Sie es getan haben.

Verwandte Themen