Skip to content

Instantly share code, notes, and snippets.

@eprothro
Last active February 1, 2017 15:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eprothro/45139dfa8a9981feb8e554961fe539fa to your computer and use it in GitHub Desktop.
Save eprothro/45139dfa8a9981feb8e554961fe539fa to your computer and use it in GitHub Desktop.
CONNECT remote:localhost root orientdb

CREATE DATABASE PLOCAL:/usr/local/Cellar/orientdb/2.2.15/libexec/databases/Test admin admin PLOCAL GRAPH
# CONNECT PLOCAL:../databases/Test admin admin

CREATE CLASS User EXTENDS V
CREATE CLASS Follows EXTENDS E
CREATE CLASS Friend EXTENDS E

CREATE VERTEX User SET id = 1
CREATE VERTEX User SET id = 2
CREATE VERTEX User SET id = 3
CREATE VERTEX User SET id = 4
CREATE VERTEX User SET id = 5

# 1 follows 2 3 4
CREATE EDGE Follows FROM ( SELECT FROM User WHERE id=1 ) TO ( SELECT FROM User WHERE id=2 )
CREATE EDGE Follows FROM ( SELECT FROM User WHERE id=1 ) TO ( SELECT FROM User WHERE id=3 )
CREATE EDGE Follows FROM ( SELECT FROM User WHERE id=1 ) TO ( SELECT FROM User WHERE id=4 )

# 2 follows 1 back (only symmetric follow, or 'friendship')
CREATE EDGE Follows FROM ( SELECT FROM User WHERE id=2 ) TO ( SELECT FROM User WHERE id=1 )
# test separate type of edge for a symmetrical follow
CREATE EDGE Friend FROM ( SELECT FROM User WHERE id=2 ) TO ( SELECT FROM User WHERE id=1 )

# 3 follows 4
CREATE EDGE Follows FROM ( SELECT FROM User WHERE id=3 ) TO ( SELECT FROM User WHERE id=4 )

# 5 follows 1
CREATE EDGE Follows FROM ( SELECT FROM User WHERE id=5 ) TO ( SELECT FROM User WHERE id=1 )

# query 1's outgoing follows
# select is preferred over traverse, it seems
SELECT EXPAND( OUT('Follows') ) FROM User WHERE id=1

SELECT FROM (TRAVERSE out("Follows") FROM (SELECT FROM User WHERE id=1) WHILE $depth <= 2) WHERE $depth >= 1

# query incoming follows for 1
# select is preferred over traverse, it seems
SELECT EXPAND( IN('Follows') ) FROM User WHERE id=1

SELECT FROM (TRAVERSE in("Follows") FROM (SELECT FROM User WHERE id=1) WHILE $depth <= 2) WHERE $depth >= 1

# query 1's mutual follows (symmetric)
SELECT Expand(intersect(out('Follows'), in('Follows'))) FROM User where id=1

# query 1's mutual friends (using separate friends edges)

SELECT EXPAND( BOTH('Friend') ) FROM User WHERE id=1

# for fun, query 1's friends' friends 
SELECT EXPAND( OUT('Follows').OUT('Follows') ) FROM User WHERE id=1


DROP DATABASE Test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment