【发布时间】:2018-11-23 00:50:02
【问题描述】:
我有以下 paramObj 和 dbQuery
paramObj = {
email: newUser.email,
mobilenumber: newUser.telephone,
password: newUser.password,
category: newUser.category,
name: newUser.name,
confirmuid: verificationHash,
confirmexpire: expiryDate.valueOf(),
rewardPoints: 0,
emailconfirmed: 'false',
paramVehicles: makeVehicleArray,
paramVehicleProps: vehiclePropsArray
}
dbQuery = `CREATE (user:Person:Owner {email:$email})
SET user += apoc.map.clean(paramObj,
['email','paramVehicles','paramVehiclesProps'],[])
WITH user, $paramVehicles AS vehicles
UNWIND vehicles AS vehicle
MATCH(v:Vehicles {name:vehicle})
CREATE UNIQUE (user)-[r:OWNS {since: timestamp()}]->(v)
RETURN user,r,v`;
然后我尝试执行
commons.session
.run(dbQuery, paramObj)
.then(newUser => {
commons.session.close();
if (!newUser.records[0]) {........
我得到了
Error: {"code":"Neo.ClientError.Statement.SyntaxError","name":"Neo4jError"}
这不会指引我到任何地方。谁能告诉我我在这里做错了什么?
这实际上是我第一次使用查询格式.run(dbQuery, paramObj),但这种格式对我的用例至关重要。我正在使用安装了 apoc 插件的 Neo4j 3.4.5 社区。p>
好的...所以我按照@inversFalcon 的建议在浏览器中进行测试,并提出了与上述参数和查询非常匹配的以下参数和查询:
:params paramObj:[{ email:"xyz123@abc.com", mobilenumber:"8711231234",password:"password1", category:"Owner",name:"Michaell",vehicles:["Toyota","BMW","Nissan"],vehicleProps: [] }]
查询
PROFILE
CREATE (user:Person:Owner {email:$email})
SET user += apoc.map.clean($paramObj, ["email","vehicles","vehicleProps"],[])
WITH user, $vehicles AS vehicles
UNWIND vehicles AS vehicle
MATCH(v:Vehicles {name:vehicle})
MERGE (user)-[r:OWNS {since: timestamp()}]->(v)
RETURN user,r,v;
现在我明白了 Neo.ClientError.Statement.TypeError:无法强制执行`List{Map{name -> String("Michaell"),车辆 -> List{String("Toyota"),String("BMW"),String("Nissan) ")},.......
我也恢复到 neo4j 3.2(回复:Mark Needham 的早期帖子)并得到了同样的错误。
【问题讨论】: