我正在用Java编写neo4j演示代码。以下是我在其中创建节点,索引它们并打印其属性的代码的一部分。
String NODE_KEY = "UserID";
String NODE_PROPERTIES = "UserProperties";
createAndIndexUser(String userID){
Node node = graphDB.createNode();
node.setProperty(NODE_KEY, nodeID);
neo4jGraph.nodeIndex.add(node, NODE_KEY, userID);
return node;
}
for(int i=0 ; i<100 ; i++){
String userID = "userID_"+i;
Node node = createAndIndexUser(userID);
node.setProperty(NODE_PROPERTIES, strNodeProperties);
}
Iterable<Node> allNodes = GlobalGraphOperations.at(graphDB).getAllNodes();
for(Node n: allNodes){
System.out.println("n.getPropertyKeys: "+n.getPropertyKeys());
System.out.println(n.getProperty(NODE_KEY));
}
当我执行此代码时,第一个println的输出是:
n.getPropertyKeys: []
而对于第二个println,我得到一个错误:
Exception in thread "main" org.neo4j.graphdb.NotFoundException: 'UserID' property not found for NodeImpl#0.
我在哪里和哪里做错了?为什么不在
n.getProperty(NODE_KEY)
上打印所有属性键?还有其他方法来获取所有节点并打印其属性吗?
最佳答案
除了您在createAndIndexUser
中添加的节点以外,图中还有哪些其他节点?请记住,neo4j图始终有一个ID为0的虚拟节点。请尝试将循环修改为:
for(Node n: allNodes){
System.out.println("n.getPropertyKeys: "+n.getPropertyKeys());
if(n.hasProperty(NODE_KEY))
System.out.println(n.getProperty(NODE_KEY));
else
System.out.println("Node " + n.getId() + " does not contain property " + NODE_KEY);
}
实际上,如果确实要确定,则可以保留上面创建的节点列表,并对照从
getAllNodes()
获取的节点进行检查。