3

我有一个在neo4j中创建一个新节点的表单查询:

cypher.get_or_create_indexed_node(index="person", key="name", value="Fred", properties={"level" : 1}

但是,当我查询 Fred 以检查他的属性时,他的 level = "1" /with quotes/. 似乎有些东西正在将他的值转换为字符串。这无关紧要——如果有必要,我可以在检索时转换它——除非我尝试进行密码查询,比如......

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    |
==> +-------------------------+

我认为这是一个数据类型问题,因为参考手册显示了跳过/限制功能。

是所有值都是字符串,还是我应该添加其他内容来正确输入?

4

1 回答 1

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- 我不希望这样,因为 cypher 模块没有这样的方法。相反,我希望它是类似graph_db或的东西batch。也许这是一个错字?

也许您可以分享更多周围的代码?它周围的其他东西可能会影响您的结果。

尼日

于 2012-12-12T08:21:38.000 回答