2015-06-25 3 views
1

Итак, когда я пытаюсь настроить пару имя/значение свойства, я не уверен, каким будет имя свойства. Это будет зависеть от узла метаданных.Установить/изменить свойство с динамическим именем с помощью Cypher

Два метаданных узлов:

{ id:1, value:'name' } 
{ id:2, value:'age' } 

мне нужно добавить свойство для узла Person, но я не хочу использовать условие о (и высчитывать не условие о). Я хочу что-то вроде:

if (metadata.id = 1) { 
    set person.name = 'xx' 
} else if (metadata.id = 2) { 
    set person.age = 'xx' 
} 

или:

match (m:metadata{id:1}), (p:person{id:1}) set p.'m.value' = 'xx' 

Я не хочу использовать if/else условие о. Есть ли условие условия шифрования или как это можно достичь?

+0

Я не хочу использовать оператор условия (и cypher не имеет оператора условий). –

+0

Спасибо за ответы. Прошу прощения за неопределенное описание –

+0

Не уверен, что это то, что вы получаете, но посмотрите на параметризованные запросы Cypher. Документы [здесь] (http://neo4j.com/docs/stable/cypher-parameters.html) и [здесь] (http://neo4j.com/docs/stable/tutorials-cypher-parameters-java.html) –

ответ

2

Вы можете использовать WHERE для фильтрации на условиях

MATCH (p:Person) WHERE p.age > 21 SET p.drunk = true 

или вы можете использовать выражение CASE для создания списка нулевой или один-элемент, который вы затем можете использовать с FOREACH

MATCH (p:Person) 
WITH p, (case when p.age > 21 then [1] else [] end) as drunk_filter 
FOREACH (x in drunk_filter | SET p.drunk = true) 

Foreach имеет то преимущество, что запрос продолжается после этого.

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