我刚刚开始使用Neo4j并运行“Hello World”类型示例。
我创建一个新数据库并打印出节点数,即1(因为在创建数据库时似乎有一个默认节点)。
我创建一个节点并将其添加到图表中。图表报告现在有2个节点 - 好的。
然后我再次删除该节点,图表报告有1个节点 - 确定。
然后我关闭了数据库。然而,当我再次运行相同的代码时(不删除数据库文件)。它现在报告最初有2个节点。而不是1-2-1,我得到2-3-2。这只发生一次 - 在第一次运行后它总是报告2-3-2。
为什么我的删除节点重新出现,但只是第一次?
以下代码:
package com.foo.neo.example;
import org.neo4j.graphdb.*;
import org.neo4j.kernel.EmbeddedGraphDatabase;
public class Deleting
{
static GraphDatabaseService graphDb;
public static void main(String[] args)
{
graphDb = new EmbeddedGraphDatabase("data");
System.out.println("STARTED");
printNodeCount();
Node firstNode;
Transaction tx = graphDb.beginTx();
try
{
firstNode = graphDb.createNode();
tx.success();
}
finally
{
tx.finish();
}
printNodeCount();
// delete the data again
tx = graphDb.beginTx();
try
{
firstNode.delete();
tx.success();
}
finally
{
tx.finish();
}
printNodeCount();
graphDb.shutdown();
}
private static void printNodeCount()
{
long nodecount = ((EmbeddedGraphDatabase) graphDb).getConfig()
.getGraphDbModule().getNodeManager()
.getNumberOfIdsInUse(Node.class);
System.out.println("Node count = " + nodecount);
}
}
并输出:
STARTED
Node count = 1
Node count = 2
Node count = 1
第二次(及后续)运行:
STARTED
Node count = 2
Node count = 3
Node count = 2
答案 0 :(得分:2)
您的代码是正确的。
但是getNumberOfIdsInUse()
不是节点(或关系)的数量,而是分配的id的数量,它们之间可能有未使用的间隔。 Id重用不会自动发生,但必须启用。
如果仍然报告错误的数字,您是否可以尝试使用graphDb.getAllNodes()
计算节点并递增计数器?