1

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: []

一方、2番目のprintlnではエラーが発生します:

Exception in thread "main" org.neo4j.graphdb.NotFoundException: 'UserID' property not found for NodeImpl#0.

私はどこで何を間違っていますか?すべての適切なキーが印刷されないのはなぜn.getProperty(NODE_KEY)ですか?

すべてのノードを取得してそのプロパティを出力する他の方法はありますか?

4

2 に答える 2

5

で追加したノード以外に、グラフにはどのようなノードがあります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()

于 2013-03-14T09:49:53.477 に答える
0

これは参照ノードであり、使用しない場合は削除できます。

また、n.getProperty(NODE_KEY,null) は非常に便利です。

于 2013-03-27T12:59:44.563 に答える