2013-08-23 28 views

Trả lời

40

Có một nhãn chức năng (nút) có thể trả về tất cả các nhãn cho một nút.

5
START n=node(*) RETURN labels(n) 
46

Để có được tất cả các nhãn nút riêng biệt:

MATCH (n) RETURN distinct labels(n) 

Để có được số lượng nút cho mỗi nhãn:

MATCH (n) RETURN distinct labels(n), count(*) 
+5

'match n TRẢ NHÃN DISTINCT (n)' là 8 ký tự ít hơn để gõ :) –

+0

Đồng ý với @FLekschas và hơn nữa, Neo khuyên bạn nên sử dụng 'MATCH' cho cơ sở dữ liệu Neo4j mới hơn vì 'START' dành cho các chỉ mục kế thừa. – ADTC

+0

'Neo.ClientError.Statement.SyntaxError Dấu ngoặc đơn được yêu cầu để xác định các nút trong các mẫu, tức là (n) ...' (v. 3.1.1) – vladkras

14

Nếu bạn muốn tất cả các nhãn cá nhân (không phải là sự kết hợp), bạn luôn có thể mở rộng trên các câu trả lời:

MATCH (n) 
WITH DISTINCT labels(n) AS labels 
UNWIND labels AS label 
RETURN DISTINCT label 
ORDER BY label 
2

Nếu bạn đang sử dụng Java API, bạn có thể nhanh chóng nhận được một iterator của tất cả các Label s trong cơ sở dữ liệu như vậy:

GraphDatabaseService db = (new GraphDatabaseFactory()).newEmbeddedDatabase(pathToDatabase); 
ResourceIterable<Label> labs = GlobalGraphOperations.at(db).getAllLabels(); 
+1

"với Cypher" - OP –

0

Nếu bạn muốn nhận được các nhãn của một node chỉ định, sau đó sử dụng labels(node) ; Nếu bạn chỉ muốn nhận tất cả các nhãn nút trong neo4j, thì hãy sử dụng hàm này thay thế: call db.labels;, không bao giờ sử dụng truy vấn này: MATCH n RETURN DISTINCT LABELS(n). Nó sẽ thực hiện quét toàn bộ bảng, rất chậm.

1

Neo4j 3.0 đã giới thiệu thủ tục db.labels() phù thủy trả lại tất cả các nhãn có sẵn trong cơ sở dữ liệu. Sử dụng:

call db.labels(); 
Các vấn đề liên quan