Neo4j - Cypher запрос чтения-записи-возврата

Я довольно новичок в neo4j. Я немного поиграл с шифром и REST API. Я хочу иметь возможность создать конечный узел по определенному пути, считайте, что эти узлы являются некоторыми типами событий. Я бы не знал во время выполнения идентификатор узла, к которому будет привязано это событие. Мне нужно либо выполнить поиск, либо получить идентификатор узла, а затем создать новый узел.

Поэтому во время выполнения я надеялся, что смогу выполнить ПОИСКПОЗ, используя шифр, чтобы получить узел, к которому я могу прикрепить событие, и СОЗДАТЬ новый узел вместе с отношением к существующему узлу, возвращаемому ПОИСКПОЗОМ. Итак, я наткнулся на шпаргалку по шифрованию, в которой есть запрос на чтение-запись-возврат, который, как я думал, подойдет. Но в документации об этом ничего особо не упоминается, или, может быть, я не супер гуглер!!

Может ли кто-нибудь сказать мне, является ли это (чтение-запись-возврат) правильным/действительным подходом?

Огромное спасибо!


person opensourcegeek    schedule 30.10.2012    source источник


Ответы (1)


Ага. Это хороший подход. Это одна из приятных особенностей работы CREATE в Cypher. Вы также можете дополнительно использовать create unique, который одновременно создает rel/node. Что-то типа:

start n=node(1)
create unique n-[:event]->(event {prop:"val"})
return n, event;

Или без create unique:

start n=node(1)
create (event {prop:"val"}), n-[:event]->event
return n, event;
person Eve Freeman    schedule 31.10.2012
comment
Спасибо - может быть, я должен был быть более ясным в вопросе. В обоих приведенных выше примерах вы начинаете с идентификатора узла 1, а затем создаете узел с отношением :event к узлу (1), я хочу что-то вроде START client=node:node_auto_index(client_name="Client1") MATCH client-[:OWNS]->(device1) create (event {time: "1234567890"}), device1-[:FAILURE_EVENT]->event return device, event Возможно ли это? Я сам не пробовал вышеуказанный запрос. Ваше здоровье - person opensourcegeek; 31.10.2012
comment
Да, это сработает, но device1 будет соответствовать всем устройствам, которые клиент :OWNS, а это может быть не то, что вам нужно? - person Eve Freeman; 31.10.2012
comment
Хороший улов - нет, я хотел бы получить уникальное устройство, которое, возможно, уже было создано. мне сделать WHERE потом, а потом CREATE? Я пытаюсь избежать поиска INSERT/UPDATE. Что-то вроде upsert в mongodb было бы круто. Но я не уверен, как этого добиться в neo4j. Большое спасибо еще раз! - person opensourcegeek; 31.10.2012
comment
Да, вы можете сделать CREATE и WHERE вместе, а также вы можете использовать CREATE UNIQUE, который фактически проверит свойства (например, device_id или что-то еще) перед созданием нового узла. Попробуйте на console.neo4j.org (которым вы можете поделиться по ссылке). Если вы опишете свои точные начальные сценарии и желаемый конец, возможно, мы сможем придумать для вас хороший шифровальный запрос. - person Eve Freeman; 31.10.2012