我有这种形式的查询,在neo4j中创建一个新节点:
cypher.get_or_create_indexed_node(index =“ person”,key =“ name”,value =“ Fred”,properties = {“ level”:1}
但是,当我查询Fred检查他的属性时,他的级别=“ 1” /带引号/.似乎有些东西将他的值转换为字符串.这没什么大不了的-我可以根据需要在检索时将其转换-除了我尝试进行密码查询时…
开始b = node:person(“ *:*”)返回b.level,ID(b)的排序依据b.level desc跳过5限制5;
…我注意到b.level的订购不符合预期.我看到类似的东西:
==> +-------------------------+
==> | b.level | ID(b) |
==> +-------------------------+
==> | "3" | 42 |
==> | "0" | 53 |
==> | "2" | 57 |
==> | "0" | 63 |
==> | "2" | 20 |
==> +-------------------------+
当我期望像这样的时候:
==> +-------------------------+
==> | b.level | ID(b) |
==> +-------------------------+
==> | 3 | 42 |
==> | 2 | 20 |
==> | 2 | 57 |
==> | 0 | 63 |
==> | 0 | 53 |
==> +-------------------------+
我认为这是一个数据类型的问题,因为reference manual显示了跳过/限制功能.
是所有值都是字符串,还是我应该添加其他内容才能正确输入?
解决方法:
事实并非如此,完全支持数字属性.我也无法使用以下测试来重新创建方案:
def test_get_or_create_indexed_node_with_int_property(self):
graph_db = neo4j.GraphDatabaseService()
fred = graph_db.get_or_create_indexed_node(index="person", key="name", value="Fred", properties={"level" : 1})
assert isinstance(fred, neo4j.Node)
assert fred["level"] == 1
graph_db.delete(fred)
我注意到您已在cypher的get_or_create_indexed_node方法前面添加了前缀-我不希望这样,因为cypher模块没有这种方法.相反,我希望它是诸如graph_db或批处理之类的东西.也许这是一个错字?
也许您可以共享更多周围的代码?它周围的其他内容可能会影响您的结果.
尼格