如何使用neo4j处理一对多关系,过滤和排序

时间:2018-12-16 00:12:34

标签: neo4j cypher

我有如下所示的mysql DB:

user
- id
- createDate

user_attribute
- id
- name

user_user_attribute
- userId
- attId
- value

现在,我将这三个表更改为neo4J节点和关系,如下所示:

node_user:
- id
- createDate
node_user_attribue:
- id
- name
relationship:
- startingNode: user
- endingNode: attribute
- value

现在,我要列出所有用户,我可以在下面使用:

match (u:User)-[uua:USER_USER_ATTRIBUTE]->(ua:UserAttribute)
return u.id, collect(ua.name), collect(uua.value)

上述查询返回如下:

12345, [att1, att2, att3], [att1_value, att2_value, att3_value]

但是现在,问题来了:

如何对某些特定的属性值进行过滤和排序,例如,我想过滤出所有拥有attr1为'value1'的用户

match (u:User)-[uua:USER_USER_ATTRIBUTE]->(ua:UserAttribute)
where uua.value="216.144.237.76"
return u.id, collect(ua.name), collect(uua.value)

但不幸的是,结果仅如下所示:

12345, ['ip'], ['216.144.237.76]

这不是我所需要的,我需要的是拥有ip作为“ xxx.xxx.xx.xx”的所有用户,并且还返回所有用户属性而不是仅返回IP属性

此外,如何在集合字段中按一个字段排序?例如,如何通过ip订购

我不知道我的要求是否明确,希望能听听您的建议。

谢谢

using With doesn't make any difference:
match (u:User)-[uua:USER_USER_ATTRIBUTE]->(ua:UserAttribute)
where uua.value="216.144.237.76"
with u, ua
return u.id, collect(ua.name)

现在我只有:

uid, ["ip]

我相信,只要我将一个关系放在哪里,就只会找到特定的关系值,而不会找到所有用户的关系。好像我必须在这里修改数据架构。

0 个答案:

没有答案