Home > database >  Cannot get parent data by mongoDB aggregate graphLookup
Cannot get parent data by mongoDB aggregate graphLookup

Time:11-08

Following is the data

[
  {
    "_id": {
      "$oid": "6364f2eee35fc06fa06afb5f"
    },
    "type": "subbranch",
    "parent_id": "635116c18fe4294398842ebb",
    "org_name": "Pune - Delhi"
  },
  {
    "_id": {
      "$oid": "635116c18fe4294398842ebb"
    },
    "type": "branch",
    "org_name": "Delhi Branch",
    "parent_id": "0"
  }
]

query which i have written is as follows

// req.params.id is 6364f2eee35fc06fa06afb5f
let id = mongoose.Types.ObjectId(req.params.id);
        let data = await organisation.aggregate([
            {
                $addFields: { "_idString": { "$toString": "$_id" }}
            },
            {
                $graphLookup: {
                   from: "organisations",
                   startWith: "$parent_id",
                   connectFromField: "parent_id",
                   connectToField: "_idString",
                   as: "parent"
                }
            },
            {
                $match: {_id: id}
            },
        ]);

but in output i get as follow

[
  {
    "_id": "6364f2eee35fc06fa06afb5f",
    "type": "subbranch",
    "parent_id": "635116c18fe4294398842ebb",
    "org_name": "Pune - Delhi",
    "_idString": "6364f2eee35fc06fa06afb5f",
    "parent": [

    ]
  }
]

i am getting empty parent array but expected output is array with parent data in it. any suggestion would be appreciated.

CodePudding user response:

Remember connectFromField expected or extracted from current aggregated collection while connectToField is connected to from orginal collection

DEMO ON https://mongoplayground.net/p/vYDdOgNt9bW

The aggregate query be like

db.collection.aggregate([
  {
    $addFields: {
      "parent_id": {
        $convert: {
          input: "$parent_id",
          to: "objectId",
          one rror: "$parent_id",
        }
      }
    }
  },
  {
    $graphLookup: {
      from: "collection",
      startWith: "$parent_id",
      connectFromField: "parent_id",
      connectToField: "_id",
      as: "parent"
    }
  }
])

Outputs

[
  {
    "_id": ObjectId("6364f2eee35fc06fa06afb5f"),
    "org_name": "Pune - Delhi",
    "parent": [
      {
        "_id": ObjectId("635116c18fe4294398842ebb"),
        "org_name": "Delhi Branch",
        "parent_id": "0",
        "type": "branch"
      }
    ],
    "parent_id": ObjectId("635116c18fe4294398842ebb"),
    "type": "subbranch"
  },
  {
    "_id": ObjectId("635116c18fe4294398842ebb"),
    "org_name": "Delhi Branch",
    "parent": [],
    "parent_id": "0",
    "type": "branch"
  }
]
  • Related