Creé categorías en mongoDB usando el nodo, agregué la propiedad principal a cada inserción para determinar cuál es la categoría principal.
[{ _id: 5889a06f274afdfd6f2bf249, cat_id: 1, title: 'Parent Category', description: '', parent: null, status: 1}] [{ _id: 5889a06f274afdfd6f2bf249, cat_id: 1, title: 'Child Category', description: '', parent: 1, status: 1}]Ahora el json de salida debería estar usando el nodo cuando consulto usando el método db.find() de mongoDB.
{ obj: [ { _id: "5889a06f274afdfd6f2bf249", cat_id: 1, title: "Parent Category", description: "", parent: null, status: 1, subcategories: [ { _id: "5889a06f274afdfd6f2bf249", cat_id: 1, title: "Child Category", description: "", parent: 1, status: 1 } ] } ]}Puedes probar algo como a continuación.
El valor de expresión $startWith para cada documento de entrada se compara con connectToField .
Para cada documento coincidente, el valor de connectFromField se compara recursivamente con el valor de connectToField en la colección.
Recopilación
{ "_id" : 1, "cat_id" : 1, "title" : "Parent Category", "parent" : null } { "_id" : 2, "cat_id" : 2, "title" : "Child Category", "parent" : 1 } { "_id" : 3, "cat_id" : 3, "title" : "Sub Child Category", "parent" : 2 }Consulta
Categories.aggregate([{ $graphLookup: { from: "categories", startWith: "$cat_id", connectFromField: "cat_id", connectToField: "parent", as: "subCategory" } }], callback)Producción
{ "_id": 1, "cat_id": 1, "title": "Parent Category", "parent": null, "subCategory": [{ "_id": 3, "cat_id": 3, "title": "Sub Child Category", "parent": 2 }, { "_id": 2, "cat_id": 2, "title": "Child Category", "parent": 1 }] } { "_id": 2, "cat_id": 2, "title": "Child Category", "parent": 1, "subCategory": [{ "_id": 3, "cat_id": 3, "title": "Sub Child Category", "parent": 2 }] } { "_id": 3, "cat_id": 3, "title": "Sub Child Category", "parent": 2, "subCategory": [] }