Search code examples
gremlingraph-databasestinkerpopamazon-neptune

Select multiple edges and vertexes in a gremlin query


I am creating a vertex with multiple edges but need a bit of help writing a query to retrieve the data.

Creation query

g.addV("referral")
                            .as("r")
                            .property("createdAt", Date.now())
                            .addE("prospect")
                            .from_("r")
                            .to(__.V(user.id))
                            .addE("opportunity")
                            .from_("r")
                            .to(__.V(second_user.id))
                            .addE("referredBy")
                            .from_("r")
                            .to(__.V(business.id))
                            .select("r")
                            .next()

I want to run a query that gets data from the first and second user. So far I have

g.V(business.id) //business
            .in_("opportunity")
            .as("referral")
            .outV("referredBy")
            .as("referrer")
            .inV("prospect")
            .as("prospect")
            .select("referral", "referrer", "prospect")
            .toList()
            .next()

I'm getting an error when running this query. I basically want an array of a referral, referrer and prospect in one object that I can iterate through. Also any help on making my initial query better would be helpful.

Please let me know if this makes sense or if you need any other info. Any help would be appreciated.


Solution

  • The errors are because you are using outV when you should be using out. You only need to use inV and outV after outE and inE. So your query should be

    g.V(business.id) //business
     .in("opportunity")
     .as("referral")
     .out("referredBy")
     .as("referrer")
     .in("prospect")
     .as("prospect")
     .select("referral", "referrer", "prospect")
     .toList()
    

    Also you don't need next as you already have toList.

    Lastly rather than use as and select I would look at the path step instead.

    g.V(business.id) //business
     .in("opportunity")
     .out("referredBy")
     .in("prospect")
     .path()
     .toList()