3

我正在尝试遵循文档 http://readthedocs.org/docs/neo4j-rest-client/en/latest/indices.html

我希望索引查询返回一个节点,但它返回一个“Iterable:Node”:

db = GraphDatabase("http://localhost:7474/db/data")
playerIndex = db.nodes.indexes.get("index1")
playerNode = db.nodes.create(player_id = "Homer")
playerIndex.add("player_id", "Homer", playerNode)
print playerIndex["player_id"]["Homer"], "\n", playerNode

印刷:

<Neo4j Iterable: Node>
<Neo4j Node: http://localhost:7474/db/data/node/157>

如何获得 neo4jrestclient 索引查询结果以返回像第 2 行一样的节点?

4

2 回答 2

3

索引查找可以返回多个节点,因此在这种情况下,它返回一个迭代器。要获取迭代器中的下一项,请执行 .next():

print playerIndex["player_id"]["Homer"].next(), "\n", playerNode

见:https ://github.com/versae/neo4j-rest-client/blob/master/neo4jrestclient/iterable.py

于 2012-05-10T14:37:52.727 回答
3

正如@espeed 所指出的, call.next()将为您提供索引中的下一个节点。您还可以迭代迭代器:

for node in playerIndex["player_id"]["Homer"]:
    print node, "\n", playerNode

或者只是使用 slice 获取迭代器中的所有结果[:]

print playerIndex["player_id"]["Homer"][:], "\n", playerNode

客户端以这种方式运行,因为任何索引查询总是返回一个元素列表,即使只有一个。因此,处理此问题的最佳方法是使用具有延迟加载的迭代器。

于 2012-05-10T16:41:41.043 回答