Gremlin - How to filter results based on Edge's property?

Viewed 112

We have 'users' record and has 'friend' edge as relationship to other users. I want to soft delete the relation by adding isDeleted property to the 'friend' edge and filter the results based on that property. How do we query that case?

1 Answers

Adding 4 users:

g.addV('users').property(id,'user1').addV('users').property(id,'user2').addV('users').property(id,'user3').addV('users').property(id,'user4')

Adding a friend relation from user1 to user2, user3 and user4

g.V('user1').addE('Friend').to(V('user2')).next()
g.V('user1').addE('Friend').to(V('user3')).next()
g.V('user1').addE('Friend').to(V('user4')).next()

Checking all friend with an edge which doens't contain isDeleted flag

gremlin> g.V('user1').outE().hasNot('isDeleted').inV()
==>v[user2]
==>v[user3]
==>v[user4]

Marking edge between user1 and user2 as deleted

g.V('user1').outE().as('myEdge').inV().has(id,'user2').select('myEdge').property('isDeleted',true)

Get Deleted Friends for user1 , edges with isDeleted flag true

gremlin> g.V('user1').outE().has('isDeleted',true).inV()
==>v[user2]

Get Current Friends for user1, without isDeleted flag.

gremlin> g.V('user1').outE().hasNot('isDeleted').inV()
==>v[user3]
==>v[user4]
Related