2015-11-20 3 views
3

Я пытаюсь «выбрать все сообщения» и исключить определенные узлы, которые находятся в массиве идентификаторов (авторы сообщения). С SQL вы можете использовать NOT IN (1, 2, 3). Как я могу создать запрос CYPHER для этого?Neo4j: Как отфильтровать узлы из списка идентификаторов?

Post <-- author -- User 
- ID     - ID 

ответ

3

В основном так же, как SQL;)

MATCH (author)-[:author]->(post:Post) 
WHERE NOT(ID(author) IN {id_list}) 
RETURN DISTINCT post 

Поскольку вы помечено на вопрос Neo4j.rb:

User.as(:author).posts.where('NOT(ID(author) IN ?)', [1,2,3]) 

В новых версиях Neo4j.rb:

User.as(:author).posts.where_not('ID(author) IN ?', [1,2,3]) 

Вы не указали, что такое идентификаторы, поэтому я defa ult до Neo4j, но имейте в виду, что они могут быть переработаны, поэтому они не предназначены для долгосрочного использования в качестве ссылки.

EDIT:

Ваш комментарий MADE быть понимаем, что, возможно, лучший способ идти о нем:

User.where_not(id: ids).posts 

Он должен перевести id к тому, что вы используете для id_property (uuid по умолчанию).

+0

ха-ха, спасибо. Я надеялся на ответ Neo4j.rb. =] – Andrew

+0

О, я думаю, я должен уточнить, у меня есть отношения Neo4j.rb 'has_many' на модели. Поэтому я не знаю, является ли отображение этого списка для получения «neo_id» - это путь или нет? – Andrew

+0

Если вы перейдете по ассоциации, вы потянете все данные за узлы. Если вам нужен только идентификатор, вы можете 'object.association.pluck (: uuid)' (если вы используете идентификатор 'uuid' по умолчанию из ActiveNode), а затем выполните' .where_not ('author.uuid IN?', Ids) '. –

Смежные вопросы