我有一个查询此表单在neo4j中创建一个新节点:
cypher.get_or_create_indexed_node(index="person", key="name", value="Fred", properties={"level" : 1}
但是,当我查询Fred检查他的属性时,他的等级=“1”/带引号/。似乎有些东西正在将他的值转换为字符串。这没关系 - 如果有必要,我可以在检索时转换它 - 除非我尝试进行类似的密码查询...
start b = node:person("*:*") RETURN b.level, ID(b) ORDER BY b.level desc SKIP 5 LIMIT 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显示跳过/限制功能。
是不是所有的值都是字符串,或者我应该正确添加其他东西呢?
答案 0 :(得分:4)
不应该是这种情况,完全支持数字属性。我也无法使用以下测试重新创建场景:
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)
我注意到你在get_or_create_indexed_node
方法前面添加了cypher
- 我不希望这样,因为密码模块没有这样的方法。我希望它可以是graph_db
或batch
。也许这是一个错字?
也许您可以分享一些周围的代码?它周围的其他东西可能会影响你的结果。
的NiGe