gpt4 book ai didi

mongodb - 使用 Neo4j jdbc 时如何获取 Node 对象?

转载 作者:可可西里 更新时间:2023-11-01 09:59:11 25 4
gpt4 key购买 nike

我在我的项目中使用了neo4j-rest-binding,但是我遇到了一些交易问题,所以我想自己控制交易。我发现 neo4j-jdbc 是一个不错的选择,它听起来比 google 论坛文章中的 neo4j-rest-binding 更有优势。 ( https://groups.google.com/forum/#!topic/neo4j/4DG_R5Yh2BM )

我使用 neo4j-rest-binding 进行查询,我可以将结果转换为 Node 对象。

QueryResult<Map<String, Object>> result = engine.query("MATCH (n) RETURN n")
Iterator<Node> nodeIter = result.to(Node.class).iterator();
// if I want to get the relationship of the node
Iterator<Relationship> outRelIter = node.getRelationships(Direction.OUTGOING).iterator();
...

但是当我使用neo4j-jdbc做查询的时候,我不知道如何获取Node对象...

ResultSet rs = stmt.executeQuery("MATCH (n) RETURN n");
while(rs.next()) {
Map<String, Object> res = (Map<String, Object>) rs.getObject("n");
// how to get Node object?
}

另一个问题是,如果我使用tx.fail()tx.success()tx.finish(),怎么可能我知道什么时候交易失败?我知道如果未调用 tx.success 它将回滚,但由于我结合了 MongoDB 和 Neo4j,所以我想在 Neo4j 失败时回滚 MongoDB。比如:

//Do some MongoDB operation...
...

//Do some Neo4j operation...
tx.begin();
try {
...
if(???) // if transaction fail
// rollback MongoDB
else
tx.success();
} finally {
tx.close();
}

当我使用 neo4j-jdbc 时是否有效? (我自己回答过这个问题)

try {
conn.setAutoCommit(false); // for Neo4j
//Do some MongoDB operation...
...

//Do some Neo4j operation...
conn.commit();
} catch(SQLException e) {
conn.rollback(); // for Neo4j
// rollback MongoDB
}

非常感谢!

最佳答案

如果您从 cypher 返回一个节点,在远程情况下它将作为 Map 返回,因此您可以使用 (Map)rs.getObject("n") 访问该属性。

如果您使用 getString() ,您将获得一个 JSON 表示。

如果您需要节点 ID 或标签,您必须显式返回它们,如下所示:

MATCH (n) 
RETURN { id : id(n), labels : labels(n), data: n } as node

然后,您将再次获得一个 map ,其中包含 idlabels 和节点属性作为 data 字段。

要控制事务,您可以使用 connection.setAutoCommit(false)connection.commit()connection.rollback()

关于mongodb - 使用 Neo4j jdbc 时如何获取 Node 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23807691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com