使用cypher和neo4j 2.0。
给定两组节点id(长度相等)和一组权重,我想在相应节点之间创建关系并将权重设置为属性。例如,如果我有以下三个列表:
node list 1: (101, 201, 301)
node list 2: (102, 202, 302)
weights: (0.1, 0.6, 0.25)
我想创建以下表示
101 - knows {w : .1} - 102
201 - knows {w : .6} - 202
301 - knows {w : .25} - 302
但不是,例如,101 - knows - 302
我可以通过迭代我的参数然后创建单个查询来完成此操作。
有没有办法批量运行它,将我的lsits作为参数传递并询问
cypher
匹配节点&属性有序吗?
我想了一下,按照以下方式使用参数会起作用,但它会创建关系的所有排列(如预期的那样),并将整个权重列表指定为属性< em>每个关系。
{
"query":
"START a1=node({starts}), a2=node({ends})
CREATE UNIQUE a1-[r:knows {w : {weights}}]-a2
RETURN type(r), r.w, a1.name, a2.name",
"params": {
"starts" : [101, 201, 301],
"ends" : [102, 202, 302],
"weights" : [0.1, 0.6, 0.25]
}
}
答案 0 :(得分:1)
你的名单在现实生活中有多大? 我可能一次送三个。
否则你应该能够使用集合和foreach来做你想做的事情:
START a1=node({starts}), a2=node({ends})
FOREACH(w in filter(w in weights : head(w)=id(a1) AND head(tail(w))=id(a2)) :
CREATE UNIQUE a1-[r:knows {w : last(w)}]-a2
)
"params": {
"starts" : [101, 201, 301],
"ends" : [102, 202, 302],
"weights" : [[101,102,0.1], [201,202,0.6], [301,302,0.25]]
}