您好如何在查询中设置Label;
exports.addNewLabel = function(req, res) {
session
.run("MATCH (n:User {id:{userId}}) SET n:{newLabel} RETURN n", {
userId: req.params.userId,
newLabel: req.body.newLabel
})
.then(function(result) {
res.status(200).send({ succeed: true, data: result.records[0]._fields });
session.close();
})
.catch(function(err) {
console.log(err);
res.status(404).send({ succeed: false, data: err });
});
};
我的帖子api查询:
rest/user/addnewlabel/5a423325507c093948e9ef91
身体:
{
"newLabel":"Firm"
}
当我打电话给我的api创建新标签时,我将这个错误视为下面的代码。当我设置关系时,我也会收到此错误。
Neo4jError: Invalid input '{': expected whitespace or a label name (line 1,
column 36 (offset: 35))
"MATCH (n:User {id:{userId}}) SET n:{newLabel} RETURN n"
答案 0 :(得分:1)
您不能通过参数动态设置标签,对于关系类型也是如此。
您可以改为使用字符串连接:
session
.run("MATCH (n:User {id:{userId}}) SET n:`" + req.body.newLabel + "` RETURN n", {
userId: req.params.userId
})
我建议验证请求。
答案 1 :(得分:0)
我找到了新的解决方案,我也可以写一个查询。
exports.addNewLabel = function(req, res) {
var query ="MATCH (n:User {id:'"+req.params.userId+"'}) SET n:"+req.body.newLabel+" RETURN n"
session
.run(query)
.then(function(result) {
res.status(200).send({ succeed: true, data: result });
session.close();
})
.catch(function(err) {
console.log(err);
res.status(404).send({ succeed: false, data: err });
});
};
答案 2 :(得分:0)
我认为更简单,更安全,更优雅的方法是使用addLabels
中的APOC library
程序:
session
.run(
`
MATCH (n:User {id: {userId}})
CALL apoc.create.addLabels(n, {newLabels}) YIELD node
RETURN node AS n
`, {
userId: req.params.userId,
newLabels: [req.body.newLabel]
})