Neo4j通过neo4j驱动查询设置Label

时间:2018-01-02 06:04:08

标签: neo4j

您好如何在查询中设置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"

3 个答案:

答案 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]
  })