2015-01-06 29 views
5

Có thể trích xuất trong một truy vấn cypher đơn lẻ, một tập hợp các nút giới hạn và tổng số nút không?Cypher để trả về tổng số nút cũng như tập hợp giới hạn

match (n:Molecule) with n, count(*) as nb limit 10 return {N: nb, nodes: collect(n)} 

Truy vấn ở trên trả về đúng các nút nhưng trả về 1 là số nút. Tôi chắc chắn hiểu tại sao nó trả về 1, vì không có nhóm, nhưng không thể tìm ra cách sửa nó.

Trả lời

8

Truy vấn sau trả về bộ đếm cho toàn bộ số hàng (mà tôi đoán là những gì cần thiết). Sau đó, nó khớp lại và giới hạn tìm kiếm của bạn, nhưng bộ đếm gốc vẫn khả dụng vì nó được chuyển qua số WITH.

MATCH 
    (n:Molecule) 
WITH 
    count(*) AS cnt 
MATCH 
    (n:Molecule) 
WITH 
    n, cnt LIMIT 10 
RETURN 
    { N: cnt, nodes:collect(n) } AS molecules 
+3

Điều gì sẽ xảy ra nếu MATCH thực sự tham gia? Sao chép nó có phải chịu một hình phạt hiệu suất, hoặc là Neo4j đủ thông minh để tái sử dụng kết quả của trận đấu đầu tiên? –

+0

Chỉ cần thử nghiệm điều này với một trận đấu thực sự nặng. Không, Neo4j không đủ thông minh. Nếu không có phần đếm phải mất 44-45 giây, với số đếm là 89-90 giây. Nó giống như chạy truy vấn hai lần vì vậy không cần phải kết hợp các truy vấn thực sự ... @ SzczepanHołyszewski –

1

Dưới đây là một giải pháp thay thế:

match (n:Molecule) return {nodes: collect(n)[0..5], n: length(collect(n))} 

84 ms cho 30k nút, ngắn hơn nhưng không hiệu quả như một ở trên bởi wassgren đề xuất.

Các vấn đề liên quan