ArangoDB图形中的非法文档密钥
我从ArangoDB开始,通过Java应用程序中的访问。在这个项目中,我需要创建一个员工集合和一个动态数量的长袜顶点,员工和这些长袜之间通过边进行连接,如图所示 在下面的代码中,我只创建了一只袜子(只需使用循环创建其他袜子)。问题是如何创建边 我已经可以创建容量和员工顶点。这些集合必须通过边缘假期连接,但我无法创建边缘 最初,我使用了解决方案1,基于。使用此代码,将三个集合创建为一个顶点,但不会创建连接员工和长袜的边 调整解决方案2的代码。基于执行ArangoDB图形中的非法文档密钥,arangodb,arangodb-java,Arangodb,Arangodb Java,我从ArangoDB开始,通过Java应用程序中的访问。在这个项目中,我需要创建一个员工集合和一个动态数量的长袜顶点,员工和这些长袜之间通过边进行连接,如图所示 在下面的代码中,我只创建了一只袜子(只需使用循环创建其他袜子)。问题是如何创建边 我已经可以创建容量和员工顶点。这些集合必须通过边缘假期连接,但我无法创建边缘 最初,我使用了解决方案1,基于。使用此代码,将三个集合创建为一个顶点,但不会创建连接员工和长袜的边 调整解决方案2的代码。基于执行createGraph()时生成的,错误:12
createGraph()
时生成的,错误:1221-非法文档密钥“
(请参见标记行)
我请专家帮助确定如何正确创建图表
解决方案1
ArangoDB arangoUtil = new ArangoDB.Builder()
.serializer(new ArangoJack())
.host(ARANGODB_HOST, ARANGODB_PORT)
.user(ARANGODB_USER)
.password(ARANGODB_PASSWORD)
.useProtocol(Protocol.HTTP_JSON)
.build();
registerStockings();
//each employee has more than one vacation record per year
for(Vacation v : listVacations){
registerEmployees(v);
registerVacations(v);
}
private registerStockings() throws ArangoDBException{
BaseDocument bDoc;
for(Stocking s : list){
bDoc = new BaseDocument();
bDoc.setKey(s.getUorg());
bDoc.addAttribute("nomeLotacao", s.getNome());
bDoc.addAttribute("descricao", s.getDescricao());
arangoUtil.db(ARANGODB_DATABASE)
.collection(“Stock”)
.insertDocument(bDoc);
}
}
private void registerEmployees(Vacation v) throws ArangoDBException{
BaseDocument bDoc = new BaseDocument();
bDoc = new BaseDocument();
bDoc.setKey(v.getSiape());
bDoc.addAttribute("nomeServidor", v.getNomeServidor());
arangoUtil.db(ARANGODB_DATABASE)
.collection("Employees")
.insertDocument(bDoc);
}
private void registerVacations(Vacation v) throws ArangoDBException{
BaseEdgeDocument bDoc = createEdgeValue();
bDoc.setKey(sb.append(v.getSiape()).append("_").append(v.getDataInicio().getTime()).toString());
bDoc.addAttribute("exercicio", v.getExercicio());
bDoc.addAttribute("duracao", v.getDuracao());
bDoc.addAttribute("dataInicio", v.getDataInicio());
bDoc.addAttribute("dataFim", v.getDataFim());
bDoc.setFrom(“Employees”);
bDoc.setTo(“Stockings”);
arangoUtil.db(ARANGODB_DATABASE)
.graph(“MyGraph”)
.edgeCollection(“Vacations”)
.insertEdge(bDoc);
}
private static BaseEdgeDocument createEdgeValue(){
VertexEntity v1 = arangoUtil.db(ARANGODB_DATABASE)
.graph(“MyGraph”)
.vertexCollection(“Employees”)
.insertVertex(new BaseDocument(), null);
VertexEntity v2 = arangoUtil.db(ARANGODB_DATABASE)
.graph(“MyGraph”)
.vertexCollection(“Stockings”)
.insertVertex(new BaseDocument(), null);
BaseEdgeDocument bed = new BaseEdgeDocument();
bed.setFrom(v1.getId());
bed.setTo(v2.getId());
return bed;
}
解决方案2
ArangoDB arangoUtil = new ArangoDB.Builder()
.serializer(new ArangoJack())
.host(ARANGODB_HOST, ARANGODB_PORT)
.user(ARANGODB_USER)
.password(ARANGODB_PASSWORD)
.useProtocol(Protocol.HTTP_JSON)
.build();
createCollections();
registerStockings();
//each employee has more than one vacation record per year
for(Vacation v : listVacations){
registerEmployees(v);
registerVacations(v);
}
private void createCollections() throws ArangoDBException{
arangoUtil.db(ARANGODB_DATABASE).createCollection(“Employees”,
new CollectionCreateOptions().type(CollectionType.DOCUMENT));
arangoUtil.db(ARANGODB_DATABASE).createCollection(“Stockings”,
new CollectionCreateOptions().type(CollectionType.DOCUMENT));
arangoUtil.db(ARANGODB_DATABASE).createCollection(“Vacations”,
new CollectionCreateOptions().type(CollectionType.EDGES));
List<EdgeDefinition> listEdgeDef = new ArrayList<EdgeDefinition>();
EdgeDefinition edgeDef = new EdgeDefinition();
edgeDef.collection(“Vacations”);
edgeDef.from(“Employees”);
edgeDef.to(“Stockings”);
listEdgeDef.add(edgeDef);
arangoUtil.db(ARANGODB_DATABASE).createGraph(“MyGraph”, listEdgeDef, null); **** error ****
}
ArangoDB arangoUtil=new ArangoDB.Builder()
.serializer(新的ArangoJack())
.host(ARANGODB_主机、ARANGODB_端口)
.user(ARANGODB_用户)
.密码(ARANGODB_密码)
.useProtocol(Protocol.HTTP_JSON)
.build();
createCollections();
寄存器存储();
//每位员工每年都有一次以上的休假记录
对于(假期v:列出假期){
注册雇员(五);
登记处(五);
}
私有void createCollections()引发ArangoDBException{
arangoUtil.db(ARANGODB_数据库).createCollection(“员工”,
新建CollectionCreateOptions().type(CollectionType.DOCUMENT));
arangoUtil.db(ARANGODB_数据库).createCollection(“袜子”,
新建CollectionCreateOptions().type(CollectionType.DOCUMENT));
arangoUtil.db(ARANGODB_数据库).createCollection(“假期”,
新建CollectionCreateOptions().type(CollectionType.EDGES));
List listEdgeDef=new ArrayList();
EdgeDefinition edgeDef=新的EdgeDefinition();
edgeDef.集合(“假期”);
来自(“员工”)的edgeDef;
边缘至(“长袜”);
listEdgeDef.add(edgeDef);
arangoUtil.db(ARANGODB_数据库).createGraph(“MyGraph”,ListedDef,null);****错误****
}
您可以在这里找到有关从java驱动程序创建图形的示例:感谢您的回复@rashtao。我访问了这个链接,我的解决方案1是基于这个代码的(我甚至会更改帖子以引用它),但由于我没有达到我的目标,我搜索了新的来源。我会根据你的建议做进一步的测试。再次感谢。@rashtao,正如我所说,我使用了你的链接作为解决方案2的参考(我在上面的评论中说错了)。我查看了您的代码,发现它看起来非常相似,在使用createGraph()
执行该行时,我的错误仍然存在。要知道错误发生在插入元素之前,为什么会是与非法密钥相关的错误?