从OrientDB检索OrientVertex对象

时间:2014-12-02 19:05:51

标签: graph-databases orientdb gremlin tinkerpop-blueprint

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

问题:

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

因此,我已经能够使用

从我现在认为的文档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();

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

提前致谢。

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:3)

查看代码,您正在使用Graph API。致电getRawGraph()后,您 不再使用图谱API,但使用文档API(方法名称有点令人困惑)。

引用OrientGraph有几种可能性

  • 使用orientGraph#getVertex*(..) / orientGraph#getVertices*(..)方式
  • 使用查询对象:orientGraph#query().has("key", value).vertices()
  • 使用gremlin查询语言
  • 使用orientGraph#command(...).execute()。在这种情况下,命令在外部交易中执行(感谢@ wolf4ood)

答案 2 :(得分:0)

有时我们想要根据其他属性(例如名称年龄等)检索“顶点”,因此,我使用了 getVertices() 方法来获取迭代器然后提取顶点,因为现在不推荐使用 getVertexByKey() 。代码是: if (requestCode == VOICE_INPUT_REQUEST_CODE) { if (resultCode == RESULT_OK) { ArrayList<String> matches = data.getStringArrayListExtra( RecognizerIntent.EXTRA_RESULTS); int matchSize = matches.size(); for (int index = 0; index < matchSize; index++) { Log.i(TAG, String.valueOf(index) + ": " + matches.get(index)); if (index == 0) { searchbar.setText(matches.get(index)); } } } else if (resultCode == PlaceAutocomplete.RESULT_ERROR) { Status status = PlaceAutocomplete.getStatus(this, data); // TODO: Handle the error. Log.i(TAG, status.getStatusMessage()); Snackbar.make(locationTextView, status.getStatusMessage(), Snackbar.LENGTH_LONG).show(); } else if (resultCode == RESULT_CANCELED) { Snackbar.make(locationTextView, "Canceled", Snackbar.LENGTH_LONG).show(); } }

所以我们在不知道记录的RID的情况下得到了顶点。 我不知道这是否是做到这一点的最佳方法,但它确实起到了作用。