Create is working but MERGE in neo4j post params h

2020-02-14 10:35发布

问题:

I have the code below .And a I am getting this error.How can I fix it ?

BTW CREATE for the same is working:

 <?php

$data2='{
  "names" : [{
    "name" : "Keanu Reeves1",
    "role" : "Neo1"
  },
  {
    "name" : "Keanu Reeves2",
    "role" : "Neo2"
  },
  {
    "name" : "Keanu Reeves3",
    "role" : "Neo3"
  }]
}';


$data ='MERGE (u:Person {names}) RETURN u';


$data2=json_decode($data2);


$data = array("query" =>$data,"params"=>$data2 );
$data_string = json_encode($data);


print_r($data_string);
//print_r($data2);
$ch = curl_init('http://192.....:7474/db/data/cypher');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen($data_string))
);

print_r ($ch);

$result = curl_exec($ch);

print_r($result);

?>

Error:

Parameter maps cannot be used in MERGE patterns

{ "message" : "Parameter maps cannot be used in MERGE patterns (use a literal map instead, eg. \"{id: {param}.id}\") (line 1, column 17)\n\"MERGE (u:Person {names}) RETURN u\"\n ^", "exception" : "SyntaxException", "fullname" : "org.neo4j.cypher.SyntaxException"

回答1:

Unfortunately due to reasons for query planning those maps cannot be used in merge. Same as if you would have dynamic table columns in sql.

what you can do though is:

create constraint on (n:Label) assert n.id is unique;

MERGE (n:Label {id:{map}.id})
ON CREATE SET n={map}