我在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"
答案 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
克里斯