Neo4j Cypher:使用Unwind和Array进行字符串构建

时间:2014-11-10 08:27:55

标签: neo4j cypher

我在neo4j中使用unwind查询,使用nodejs驱动程序(https://github.com/philippkueng/node-neo4j

我要做的是在展开查询中包含一个对象数组。 如果我硬编码如下所示的字符串,它目前有效,但我试图动态插入数组。

UNWIND [{Label:'User',Lang:'English'},{Label:'Usuario',Lang:'Español'},{Label:'用户',Lang:'中文_简体'}] as ll 

无论我使用什么查询,经过测试,上面的工作都有效,但是如果我做了类似下面的事情,它就不会:

var MyList =  [{Label:'User',Lang:'English'},{Label:'Usuario',Lang:'Español'},{Label:'用户',Lang:'中文_简体'}];

"UNWIND "+ MyList " +  as ll" 

2 个答案:

答案 0 :(得分:2)

问题是,当您执行"UNWIND " + MyList时,您将MyList转换为字符串,它将类似于[object Object],[object Object],...。我的第一个想法是使用JSON.stringify但是它产生了一个JSON,这在cypher语法中是不行的(它是{" Label":...}而不是{Label:...} )。解决方案是使用parameters

var queryString = 'UNWIND {list} as ll // continue query';
var queryParams = { list: MyList }; 
db.cypherQuery(queryString, queryParams, function(err, res) { 
  // handle response 
});

答案 1 :(得分:1)

理想情况下,您将在查询中使用ll标识符。

但是,通过看到你有一个名为Label的属性,我提醒你,目前无法动态添加标签。

您可能会执行的查询是:

UNWIND MyList AS ll
CREATE (user:User) SET user.lang = {ll}.Lang

克里斯