Neo4j / Cypher: передача свойств через WITH - PullRequest
0 голосов
/ 16 октября 2018

Я публикую новый вопрос, потому что это отдельная, но связанная с этим проблема: Neo4j: связать разные узлы с одним узлом

Приведенный ниже запрос возвращает правильное числоузлов.

MATCH (act)--(obj) 
WHERE obj.filename IN ["6013", "6005"]
WITH act.timestamp as timestamp, collect(DISTINCT act) as acts
CREATE (a:Abs{name: 'SigEvent'}) 
FOREACH (act in acts | CREATE (act)-[:LINK]->(a))

Следующий запрос игнорирует COLLECT и создает узел a для каждой записи в коллекции вместо создания узла a для каждой пары.Кроме того, когда я перемещаю CREATE за пределы FOREACH, я получаю следующую ошибку: Type mismatch: expected Any, Map, Node or Relationship but was List<Map>.

 MATCH (act)--(obj) 
    WHERE obj.filename IN ["6013", "6005"]
    WITH act.timestamp as timestamp, collect({act:act, obj:obj}) as pairs
    CREATE (a:act{ Event: pairs.obj.filename, Description:pairs.act.message, timestamp:timestamp}) 
         FOREACH (pair in pairs | CREATE (pair)-[:LINK]->(a))

Пример набора данных:

Набор 1: (действие: «Журнал событий», отметка времени: 3461000) (действие: «Отчет о работоспособности», отметка времени: 3461000)

Набор 2: (действие: «Журнал событий», отметка времени: 149100) (действие: «Отчет о работоспособности», отметка времени: 149100)

Желаемый результат:

(a {Источник: «Журнал событий» и «Отчет UPtime», отметка времени: 3461000}) <- [: LINk] - (act) </p>

(a {Источник: «Журнал событий» и «Отчет UPtime», отметка времени: 149100) <- [: LINk] - (act) </p>

1 Ответ

0 голосов
/ 16 октября 2018

Когда вы используете COLLECT (или любой аггрогат), все другие неагрогаты в WITH / RETURN будут использоваться в качестве ключей GROUP BY.Таким образом, добавляя act и obj, COLLECT собирает все акты с одной и той же отметкой времени, act и obj (иначе говоря, 1 act за действие).Если вам нужно объединить несколько столбцов, вы можете объединить несколько столбцов / свойств одновременно

MATCH (act)--(obj) 
WHERE obj.filename IN ["6013", "6005"]
WITH act.timestamp as timestamp, COLLECT(DISTINCT act.message) as messages, COLLECT(DISTINCT obt.filename) as filenames, COLLECT(act) as acts
CREATE (a{ Event: filenames, Description:messages, timestamp:timestamp})
FOREACH (act in acts | CREATE (act)-[:LINK]->(a))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...