我有如下所示的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]
我相信,只要我将一个关系放在哪里,就只会找到特定的关系值,而不会找到所有用户的关系。好像我必须在这里修改数据架构。