eprothro
1/31/2017 - 7:09 PM

orientdb.md

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