У меня есть 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]
Я считаю, что всякий раз, когда я ставлю где для одной связи, ТОЛЬКО это конкретное значение отношения будет найдено, не все отношения пользователя будут найдены.Кажется, мне нужно изменить схему данных здесь.