Search code examples
graph-databasesgremlintitanjanusgraph

How to "join" vertices and the count of their edges as a 'property' of those vertices in JanusGraph or Gremlin?


I need to return the 'posts' vertices, but those posts have some 'like' edges, how can I return the count of 'likes' edges for that posts as a property of that edge, like this:

{ title: 'lorem ipsum.....', content: 'yadayadayada', likes: 6 <---- }


Solution

  • Using TinkerPop's modern toy graph as an example, you could do something like this:

    gremlin> g.V().as('a').
    ......1>   map(outE('created').count()).as('count').
    ......2>   select('a','count').by(valueMap()).by()
    ==>[a:[name:[marko],age:[29]],count:1]
    ==>[a:[name:[vadas],age:[27]],count:0]
    ==>[a:[name:[lop],lang:[java]],count:0]
    ==>[a:[name:[josh],age:[32]],count:2]
    ==>[a:[name:[ripple],lang:[java]],count:0]
    ==>[a:[name:[peter],age:[35]],count:1]
    

    It returns the properties of the vertices in "a" and the count of "created" edges. You might also choose to use project():

    gremlin> g.V().
    ......1>   project('a','knows','created').
    ......2>     by(valueMap()).
    ......3>     by(outE('knows').count()).
    ......4>     by(outE('created').count())
    ==>[a:[name:[marko],age:[29]],knows:2,created:1]
    ==>[a:[name:[vadas],age:[27]],knows:0,created:0]
    ==>[a:[name:[lop],lang:[java]],knows:0,created:0]
    ==>[a:[name:[josh],age:[32]],knows:0,created:2]
    ==>[a:[name:[ripple],lang:[java]],knows:0,created:0]
    ==>[a:[name:[peter],age:[35]],knows:0,created:1]