其中(A) - [:关系] - >(B)和(B) - [:关系] - >(C)使用相同的关系(在这种情况下:关系),我想写具有条件的密码查询,以便如果第二级关系(A) - >(C)的计数大于x,则不显示(B) - >(C),即仅显示(A) - >(B)
我尝试过这样的事情:
MATCH(A) WHERE id(A)={id}
OPTIONAL MATCH p=(A)-[:Relationship]->(B)
OPTIONAL MATCH q=(A)-[:Relationship]->(B)-[:Relationship]->(C)
RETURN A, p, CASE WHEN COUNT(q)<10 THEN q ELSE [] END AS foo
问题是foo总是q
答案 0 :(得分:1)
您是否考虑过匹配最大长度的任意路径?沿着这些方向的东西?
MATCH path=(n:Node {name: {id} })-[:RELATIONSHIP*0..9]->(:Node)
RETURN PATH
或者,你可以使用APOC,它可以让你参数化路径的深度。
MATCH (one:Node {name : {id} })
CALL apoc.path.expand(one, "RELATIONSHIP>", "+Node", 0, {n}) YIELD path AS p
return p
如果您想从起始节点找到特定深度{n}
的所有节点,但只有在它们小于特定阈值{lim}
时才返回它们,那么您可以执行类似这样的操作
MATCH (one:Node {name : {id} })
CALL apoc.path.expand(one,"RELATIONSHIP>","+Node", 0, {n}) yield path as p
WITH collect(nodes(p)[{n}]) AS nodes_at_depth
RETURN
CASE
WHEN size(nodes_at_depth) < {lim} then nodes_at_depth
ELSE []
END AS nodes_at_depth
或者,您可以返回该深度的第一个{lim}
节点
MATCH (one:Node {name : {id} })
CALL apoc.path.expand(one,"RELATIONSHIP>","+Node", 0, {n}) yield path as p
WITH collect(nodes(p)[{n}]) AS nodes_at_depth
RETURN nodes_at_depth[0..{lim}]
答案 1 :(得分:0)
您是否尝试在OPTIONAL MATCH上添加WHERE,以便仅在关系数低于阈值时显示?
function readURLNew(input) {
this.input = input;
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
debugger;
$(input).parent().prev().attr('src', e.target.result);
$(input).parent().prev().prev().show();
$(input).parent().prev().show();
}
reader.readAsDataURL(input.files[0]);
}
}
$(function() {
$(document).on('change','.add_image_new', function() {
readURLNew(this);
});
})
重要的是要记住,WHERE子句仅适用于前一个MATCH,OPTIONAL MATCH或WITH,因此在这种情况下,OPTIONAL MATCH将失败,MATCH(A) WHERE id(A)={id}
OPTIONAL MATCH p=(A)-[:Relationship]->(B)
OPTIONAL MATCH q=(A)-[:Relationship]->(B)-[:Relationship]->(C)
WHERE size((B)-[:Relationship]->()) < 10
RETURN A, p, CASE WHEN q IS NULL THEN [] ELSE q END AS foo
将为空时的数量为来自q
的次要关系超出了您的阈值。