как использовать neo4j для обработки отношений один ко многим, фильтрации и сортировки - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть 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]

Я считаю, что всякий раз, когда я ставлю где для одной связи, ТОЛЬКО это конкретное значение отношения будет найдено, не все отношения пользователя будут найдены.Кажется, мне нужно изменить схему данных здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...