Cypher - условный набор - PullRequest
       41

Cypher - условный набор

0 голосов
/ 02 августа 2020

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

MATCH (n:address {id: $id})
  SET n = {
    name: COALESCE($name, n.name),
    streetAddress: COALESCE($streetAddress, n.streetAddress),
    build: COALESCE($build, n.build),
    door: COALESCE($door, door),
    latitude: COALESCE($latitude, n.latitude),
    longitude: COALESCE($longitude, n.longitude)
  }

RETURN (n)

Но это дает следующую ошибку:

Neo4jError: Expected parameter(s): name, streetAddress, build, latitude, longitude

Что делать?

1 Ответ

0 голосов
/ 02 августа 2020

Поскольку я использую Javascript с драйвером Neo4j для Node.js, я использовал интерполяцию строк с функцией для динамического построения запроса:

verifyParam(param, paramName) {
  if (param !== null && param !== undefined) return `SET n.${paramName} = ${param}`;

  return '';
}

Затем в строке запроса:

`
MATCH (n:address {id: $id})

${verifyParam($name, 'name')}
${verifyParam($streetAddress, 'streetAddress')}
${verifyParam($build, 'build')}
${verifyParam($door, 'door')}
${verifyParam($latitude, 'latitude')}
${verifyParam($longitude, 'longitude')}

RETURN (n)
`

Возможно, это не лучшее решение, но я не нашел лучшего решения, используя только Cypher.

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