我正在尝试获得同时为app.get('/proxy', (req, res) => {
request('http://example.com/').pipe(res);
});
和:USER
帐户的用户和帐户的结果,这些帐户与任何其他帐户之间没有:ADMIN
关系。
背景
这为我提供了既不是父帐户也不是子帐户的帐户:
:PARENT
这为我提供了所有用户与帐户之间也有MATCH (a: Account)
WHERE NOT (a)-[:PARENT]-()
RETURN a
关系的帐户:
:ADMIN
问题:
尝试将两者结合使用时,我的结果中仍然会显示MATCH (u)-[:ADMIN]-(a)-[:USER]-(u)
RETURN a, u
个关联的帐户:
:PARENT
这就像第2行的MATCH (u)-[:ADMIN]-(a)-[:USER]-(u)
WHERE NOT (a)-[:PARENT]-()
RETURN u, a
没有任何效果。可能会显示不需要的帐户,因为它们与第一个WHERE
匹配,但是从此处我想排除所有具有MATCH
关系的帐户。
我尝试了什么
我一直在尝试使用:PARENT
,OPTIONAL MATCH
关键字,并根据条件的不同顺序和变体进行匹配。上面的三个片段是我最接近描述它出错的地方。
我想象的另一种解决方法可能是
WITH
我得到的结果太少了。它遗漏了几个没有任何MATCH (a: Account)
OPTIONAL MATCH (a)-[p:PARENT]-()
WITH a, p
WHERE p IS NULL
OPTIONAL MATCH (u)-[relu: USER]-(a)-[rela: ADMIN]-(u)
with u, a, relu, rela
WHERE NOT relu IS NULL
AND NOT rela IS NULL
RETURN a, u
关系的帐户,但仍然拥有与该帐户有:PARENT
和:USER
关系的用户。
似乎我错过了如何聚合查询的重要观点。
答案 0 :(得分:2)
(这个答案正在进行中。)
我创建了一个小示例数据集:
CREATE
(a:Account {name: 'acc1'}),
(u:User {name: 'user1'}),
(u)-[:ADMIN]->(a),
(u)-[:USER]->(a)
此查询似乎有效。与您的第三个查询的唯一区别是添加了:Account
。
MATCH (u)-[:ADMIN]-(a:Account)-[:USER]-(u)
WHERE NOT (a)-[:PARENT]-()
RETURN u, a