2016-04-12 17 views
0
Ben Neo4j öğrenmek, hem de daha iyi grafik veritabanı kavramını anlamak için küçük bir bağlantı yapısının geliştiriyorum

Neo4j - Düzey2 veya Düzey3 bağlantılarını alın

şöyle ben çok kullanıcı ve aralarındaki ilişki BİLİR var

enter image description here

Neo4j'deki düğümleri ve ilişkileri oluşturmak için aşağıdaki cqls'leri kullanıyorum.

CREATE (user1:User {name:"User1",mail:"[email protected]",mobile: 9000090001}) 
CREATE (user2:User {name:"User2",mail:"[email protected]",mobile: 9000090002}) 
CREATE (user3:User {name:"User3",mail:"[email protected]",mobile: 9000090003}) 
CREATE (user4:User {name:"User4",mail:"[email protected]",mobile: 9000090004}) 
CREATE (user5:User {name:"User5",mail:"[email protected]",mobile: 9000090005}) 
CREATE (user6:User {name:"User6",mail:"[email protected]",mobile: 9000090006}) 
CREATE (user7:User {name:"User7",mail:"[email protected]",mobile: 9000090007}) 
CREATE (user8:User {name:"User8",mail:"[email protected]",mobile: 9000090008}) 
CREATE (user9:User {name:"User9",mail:"[email protected]",mobile: 9000090009}) 

MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090001 AND user2.mobile = 9000090002 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 
MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090001 AND user2.mobile = 9000090003 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 
MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090002 AND user2.mobile = 9000090004 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 
MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090002 AND user2.mobile = 9000090005 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 
MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090003 AND user2.mobile = 9000090006 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 
MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090005 AND user2.mobile = 9000090007 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 
MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090005 AND user2.mobile = 9000090008 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 
MATCH (user1:User), (user2:User) WHERE user1.mobile = 9000090006 AND user2.mobile = 9000090009 CREATE (user1)-[knows:KNOWS ]->(user2) RETURN user1, user2 

Şimdi seviye-2 veya seviye-3 bağlantıları Belirli bir kullanıcı için getirmek istiyorum. Örneğin

:

If I ask for level-2 connections for User1 then I should get User4, User5, User6 
If I ask for level-3 connections for User1 then I should get User7, User8, User9 

Ben şu CQL

START levelGraph=node(1) 
MATCH path=(user1:User)-[knows:KNOWS*1..]->(user2:User) 
WHERE user1.mobile = 9000090001 
RETURN user1, user2, length(path) as downlevel 
ORDER BY length(path) asc 

bu beni Kullanıcı1 sahip olduğu tüm doğrudan veya dolaylı bağlantıları veriyor var. Herkes

MATCH path=(user1:User)-[knows:KNOWS*2..2]->(user2:User) 

o gibi olmalı üçüncü düzeyini elde etmek gibi olması gerektiği, bu

cevap

0

İkinci seviyesini elde etmek için bu

MATCH path=(user1:User)-[knows:KNOWS*1..]->(user2:User) 

değiştirebilir yerine getirmek benim CQL ne olması gerektiğini işaret edebilir

MATCH path=(user1:User)-[knows:KNOWS*3..3]->(user2:User) 
+0

Girdiğin için teşekkürler, iki yönlü ilişkilerim varsa ne olur? yapma ihtiyacı? –

+0

Ne demek istediğini anladığından emin değilim. Belki MATCH yolu gibi bir şey = (kullanıcı1: Kullanıcı) - [bilir: BİLİNÇ * 2..2] - (kullanıcı2: Kullanıcı) sizin için çalışacaktır – Evgen

+0

burada yeni bir soru yayınladı http://stackoverflow.com/questions/36596002/ seviye-2-ya-seviye-3-bağlantıları-zaman-biz-var-çift yönlü-ilişki –