2013-02-02 23 views
1

我想在py2neo的索引列表内的特定节点上设置一个新属性。这个想法是列表中的第一个节点将获得一个新的属性。属性值将是静态的,以便将来找到所有相关的节点。在下面的例子中,“nodez”列表将会改变,但是第一个项目总是需要新的属性和静态值。Py2neo - “set_node_property”的正确用法

from py2neo import neo4j, cypher 
graph_db = neo4j.GraphDatabaseService("http://localhost:7474/db/data/") 

nodez = ['test1', 'test2', 'test3'] 
mytestindex = graph_db.get_or_create_index(neo4j.Node, "name") 
nodes2 = [] 
for word in nodez: 
    nodes2.append(mytestindex.get_or_create("name", word, {"name": word})) 
a = nodes2[0] 
newpropkey = "new_property" 
newpropvalue = "static_value" 
set_node_property(a, newpropkey, newpropvalue) 

因此,如果下一次该程序运行,并且nodez = [ 'TEST4', 'TEST5', 'TEST6'],则两个 'test1的' 和 'TEST4' 将包含新的属性值。例如,以下密码查询将返回索引“name”中'test1'和'test4'的节点。谢谢你的帮助!

START a = node:name(new_property="static_value") 
+0

我意识到我忘记了导入WriteBatch。它仍然不能正常工作,所以我知道我会以错误的方式去解决它 –

回答

2

set_node_property仅适用于批量操作。在这种情况下,您只需使用:

a[newpropkey] = newpropvalue 
+0

感谢奈杰尔,我知道这是一个简单的修复。它看起来像它的工作,虽然下面的Cypher查询返回没有结果:neo4j-sh(0)$ START a = node:name(new_property =“static_value”) > RETURN a; ==> + --- + ==> | a | ==> + --- + ==> + --- + ==> 0行 ==> 0 ms –

+1

在py2neo 2.0中,你可以设置属性,但是我认为你需要推动数据库是这样的: node.push() – Marnee