2015-03-19 13 views
5

Tôi đang tìm giải thích về cách thức hoạt động và tại sao không trả lại số lượng nút trong đường dẫn. Giả sử tôi đã khớp một đường dẫn p. Bây giờ là:Cách đếm (nút (p)) hoạt động trong Cypher, Neo4j

WITH p, count(nodes(p)) AS L1 RETURN L1 

lợi nhuận 1.

Khi điều này là rõ ràng, làm thế nào để đếm những con đường node đúng cách?

Trả lời

5

count() là một chức năng tổng hợp . Khi sử dụng bất kỳ hàm tổng hợp nào, các hàng kết quả sẽ được nhóm theo bất kỳ thứ gì được bao gồm trong mệnh đề RETURN và không một hàm tổng hợp. Trong trường hợp này, các hàng kết quả sẽ được nhóm theo p và giá trị trả về sẽ được tính (các nút (p)).

nodes(p) lợi nhuận một mảng các nút, vì vậy count(nodes(p)) sẽ trả lại số của mảng và sẽ luôn bằng 1.

Để trả lại số lượng nút trong đường dẫn bạn nên sử dụng size(nodes(p)).

Nếu bạn chỉ quan tâm đến chiều dài của một con đường và không đặc biệt trong các nút được bao gồm trong đó, tôi sẽ khuyến khích bạn sử dụng length(p). Điều này sẽ trả về độ dài trong rels cho một đường dẫn nhất định, mà không cần phải thao tác/truy cập các nút.

+1

"chiều dài trong rels" là một trình độ chuyên môn rất quan trọng - nó được sử dụng cho chuyến đi tôi không ngừng chiều dài đó là chiều dài trong rels, đó là * không * số nút trong đường dẫn, mà luôn luôn là một trong hơn. – FrobberOfBits

+0

Điều đó có ý nghĩa, cảm ơn bạn đã xóa thông tin này. – wiktus239

+0

Bạn nói 'các hàng kết quả sẽ được nhóm theo bất kỳ thứ gì được bao gồm trong mệnh đề RETURN' nhưng sau đó bạn nói' Trong trường hợp này, các hàng kết quả sẽ được nhóm lại bởi p'. Bạn mâu thuẫn với bản thân – TheLogicGuy

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