Neo4j Как объединить узлы из данных JSON, если ключ является необязательным

В C целые числа часто используются дважды как нормальное число и логическое, например, для циклов, которые выполняются, пока определенное число не равно нулю. Это использование, которое явно имеет свои достоинства для краткого кода, например, наивную процедуру strlen:

const char *s;
for (s = str; *s; ++s)
    ;
return (s - str);

, но в то время как короткая она маскирует истинную цель этого фрагмента, который по сути говорит «loop while the character I am взгляд не является нулевым символом ». Но записано это просто говорит: «относиться к нему как к логическому, когда мне это нравится, и как к числу в некоторых других случаях».

Такая двойная природа якобы часто приводит к проблемам и делает код менее читаемый (поскольку вы должны судить из контекста, является ли данное использование int предназначено как int или bool).

Если вам абсолютно необходимо использовать логическое значение как целое число вы можете использовать

Convert.ToInt32(someBool)

в качестве Noldorin, упомянутых , или свернуть свой с помощью

someBool ? 1 : 0

. Оба из них ясно говорят, что вы используете int (а не bool).

0
задан Tim Holdsworth 13 July 2018 в 19:05
поделиться

1 ответ

Вам просто нужно перейти туда, где это условие, и добавить WITH следующим образом:

CALL apoc.load.json('file.txt') YIELD value AS q UNWIND q.id AS id UNWIND q.authors as authors MERGE (a:Author {name:authors.name}) WITH a, q, authors WHERE authors.org is not null MERGE (o:Organization {name:authors.org}) MERGE (i:Paper {id:q.id}) ON CREATE SET i.title=q.title MERGE (a)-[:WORKS_AT]->(o) RETURN o.name;

Причина, по которой вы получаете сообщение об ошибке, состоит в том, что вы пытаясь сделать MERGE после WHERE, что не является синтаксически действительным. Запись структуры запроса в cypher работает следующим образом: (взято из cypher refcard )

[MATCH WHERE] [OPTIONAL MATCH WHERE] [WITH [ORDER BY] [SKIP] [LIMIT]] (CREATE [UNIQUE] | MERGE)* [SET|DELETE|REMOVE|FOREACH]* [RETURN [ORDER BY] [SKIP] [LIMIT]]

После WHERE нет возможности использовать MERGE без сначала используя WITH.

1
ответ дан FrobberOfBits 17 August 2018 в 12:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: