4

我在 Java 中使用 OrientDB 的 Graph API 时遇到问题。

问题:

从持久的本地图形数据库中检索顶点(OrientVertex 或 Vertex?),其中包含通过控制台创建的多个顶点/边。

因此,我已经能够使用我现在认为是 Document API 的方式查询数据库

graph = factory.getTx();
String string = String.format("select * from V where name like \"%s\"", criteria);
OSQLSynchQuery<ODocument> query = new OSQLSynchQuery<OrientVertex>(string);
List<OrientDocument> results = graph.getRawGraph().command(query).execute();

但这不适用于顶点。如何运行返回数据库中顶点列表的查询?

提前致谢。

4

3 回答 3

5

您可以避免直接使用 orientGraph 获取 rawGraph 和执行命令,并返回 OrientVertex 的可迭代对象

像这样 :

graph = factory.getTx();
String query = String.format("select * from V where name like \"%s\"", criteria);
OSQLSynchQuery<OrientVertex> qr = new OSQLSynchQuery<OrientVertex>(query);
Iterable<OrientVertex> vertices = graph.command(qr).execute();
于 2014-12-02T22:24:54.450 回答
3

查看您的代码,您正在使用 Graph API。调用后,getRawGraph()不再使用 Graph API,而是使用 Document API(方法名称有点混乱)。

参考OrientGraph有几种可能性

  • 使用orientGraph#getVertex*(..)/orientGraph#getVertices*(..)风格的方法
  • 使用查询对象:orientGraph#query().has("key", value).vertices()
  • 使用gremlin查询语言
  • 使用orientGraph#command(...).execute(). 在这种情况下,命令在事务之外执行(感谢@wolf4ood)
于 2014-12-02T19:40:18.513 回答
0

有时我们想特别根据其他属性(如名称年龄等)检索顶点,所以我使用getVertices()方法获取迭代器,然后提取顶点,因为现在不推荐使用getVertexByKey()。代码是: Vertex v2=graph.getVertices("name","Business").iterator().next();

所以我们只是在不知道记录的 RID 的情况下得到了顶点。我不知道这是否是最好的方法,但它确实有效。

于 2016-06-13T10:30:55.203 回答