0

ich ein verschachteltes JSON-Objekt in einer hierarchischen Struktur, wie unten definiertFrühling Daten MongoDB Hierarchie

[ 
    { 
     "categoryId": 1, 
     "categoryName": "Category 1", 
     "childCategory": null, 
     "active": false 
    }, 
    { 
     "categoryId": 2, 
     "categoryName": "Category 2", 
     "active": true, 
     "childCategory": [ 
      { 
       "categoryId": 4, 
       "categoryName": "Category 4", 
       "childCategory": null, 
       "active": false 
      }, 
      { 
       "categoryId": 5, 
       "categoryName": "Category 5", 
       "childCategory": null, 
       "active": true 
      } 
     ] 
    }, 
    { 
     "categoryId": 10, 
     "categoryName": "Category 10", 
     "childCategory": null, 
     "active": true 
    } 
] 

Daraus mag ich alle aktiven Kategorien zu einer einzelnen Array-Struktur wählen. Meine Ausgabe sollte

sein
[ 
    { 
     "categoryId": 2, 
     "categoryName": "Category 2", 
     "active": true 
    }, 
    { 
     "categoryId": 5, 
     "categoryName": "Category 5", 
     "active": true 
    }, 
    { 
     "categoryId": 10, 
     "categoryName": "Category 10", 
     "active": true 
    } 
] 

Ist es möglich, diese Daten in einer einzelnen Abfrageanweisung direkt abzurufen. Ich verwende Federdaten für Mongodb.

Antwort

1

Sie können unter Aggregation versuchen.

$redact, um jeweils eine Dokumentebene zu durchlaufen und $$DESCEND und $$PRUNE nach den entsprechenden Kriterien auszuführen.

$unwind die $childCategory mit preserveNullAndEmptyArrays, um das Array mit null Werte zu halten.

db.collection.aggregate({ 
    $redact: { 
     $cond: [{ 
      $eq: ["$active", true] 
     }, "$$DESCEND", "$$PRUNE"] 
    } 
}, { 
    $unwind: { 
     path: "$childCategory", 
     preserveNullAndEmptyArrays: true 
    } 
}) 
Verwandte Themen