Могу ли я параметризовать метки и свойства при СОЗДАНИИ или УСТАНОВКЕ? (REST и транзакция)

#rest #parameters #neo4j #cypher #labels

#rest #параметры #neo4j #шифр #метка

Вопрос:

У меня есть запрос

 1. CREATE (a:%1$s {props}), (b:%2$s {props2}), (b)-[:%3$s {relProps}]->(a)
2. MATCH (a:%1$s { value:{value} })-[:%2$s]->(b) WHERE (b:%3$s) SET (b {props})
  

Я использую underscore.string для разрешения строкового формата, но хотел бы просто придерживаться параметров.

Можно ли параметризовать метки, такие как

 { 
  "query": CREATE (a:{label} {props}),
  "params": {
    "label":"SomeLabel",
    "props":{....}
  }
}
  

и можно ли также параметризовать свойства в НАБОРЕ?

 {
  "query": "MATCH ..... SET (node {props})"
  "params": {
    "props":{
      "prop1:":"Property Name",
      .... 
    }
  }
}
  

Также есть ли способ параметризации при «СЛИЯНИИ»? это дает мне «Карты параметров не могут использоваться в шаблонах СЛИЯНИЯ (вместо этого используйте буквальную карту, например. «{id: {param}.id}»)’

РЕДАКТИРОВАТЬ: как насчет параметризации предложения where?

 MATCH (:Identity%1$s {nodeId:{nodeId})-[r*2..3]-(node1)-[b:%2$s]->(node2) %4$s return *
  

У меня есть % 4 $ s, чтобы я мог поместить любые предложения, которые мне нужны. Если я хочу, чтобы это было как

 WHERE node1.nodeId= {someNodeId} SET b= {props}
  

возможно ли это??

Также, когда я выполняю транзакцию, НАБОР node={props}, похоже, не работает. Я пытался

 statements:[
  {
    "statement":"..... SET node={props}",
    "parameters":{
      "props": {
        "description":"some description"
      }
    }
  }
]
  

Есть предложения?? Спасибо!

Ответ №1:

Вы не можете параметризовать метки, поскольку план запроса может выглядеть по-разному для разных меток.

Возможна параметризация нескольких свойств с помощью карты, обратите внимание на небольшое различие в SET синтаксисе:

 {
  "query": "MATCH ..... SET node = {props}"
  "params": {
    "props":{
      "prop1:":"Property Name",
      .... 
    }
  }
}
  

Не на 100%, MERGE но я думаю, это должно сработать:

 {
  "query": "MERGE (n:Label {identifier: {idValue}) ON CREATE SET n = {props}"
  "params": {
    "identifier": 123,
    "props":{
      "identifier": 123,
      "prop1:":"Property Name",
      .... 
    }
  }
}
  

Комментарии:

1. Спасибо, Стефан, настройка нескольких свойств определенно работает с этим запросом. Я попробую ОБЪЕДИНИТЬ, как вы предложили!

2. Можно ли это сделать так, чтобы это было не все или ничего? Я просто хочу обновить одно свойство, но, выполнив Set node ={props}, если я установлю одно свойство, все параметры будут перезаписаны. 🙁

3. использование SET n = {props} переопределяет существующие свойства и добавляет новые, оставляя другие нетронутыми.

4. Эй, Стефан, я получаю сообщение об ошибке «Недопустимый ввод» «: ожидаемый пробел, комментарий……..’. Мой запрос таков: «Совпадение (a:% 1 $ s { значение:{значение} })-[:% 2 $ s]-> (b) где (b:% 3 $ s) УСТАНОВИТЬ b = {props} »

Ответ №2:

Я узнал!

 CREATE  ...  SET node = {props}
  

помогает ли установить несколько свойств с параметрами

документ: http://docs.neo4j.org/chunked/snapshot/cypher-parameters.html