当前位置: 首页 > 面试题库 >

如何从gremlin返回子图,它是Java的易用格式

亢建木
2023-03-14
问题内容

当我尝试进行一次遍历并使用Gremlin一次从DSE Graph 5.0中带来很多东西时,我对非常简单的事情感到非常沮丧。

在我简化的情况下,我有:

  • 1个具有特定uuid的实体
  • 实体可以具有零(请参阅可选)或更多类型
  • 我需要能够返回entitytypes

我到目前为止可以工作的非常丑陋:(

List list = g.V().hasLabel("Entity").has("uuid","6708ec6d-4518-4159-9005-9e9d642f157e").as("entity")
        .optional(outE("IsOfType").as("types"))
        .select("entity", "types").toList();
List<Edge> typeEdges = new ArrayList<>();
Vertex entityV = null;
for (Object obj : list) {
    entityV = ((Vertex)((LinkedHashMap) obj).get("entity"));
    Edge typeEdge = ((Edge)((LinkedHashMap) obj).get("types"));
    typeEdges.add(typeEdge);
}

列表中的每一行都有一个实体和以下类型之一:/

我之所以这样做,是因为Vertex并没有edges()根据DSE 5.0 Fluent
API中的遍历进行填充。因此,要么我陷入多重遍历,要么陷入一个巨大的可怕遍历,这在Java对象中很难反序列化,或者我必须将gremlin查询作为String传递,但不会返回Gremlin
Vertex对象,而是返回DSE :(

在我不太简化的情况下,我想返回上面的多个实体及其各自的类型,该怎么做?

最后,有什么好的方法可以导致可重用的代码用于具有不同类型对象的子图的自定义对象映射?

预先感谢您的帮助!


问题答案:

如果Entity:Type1:n恋爱关系,那么您甚至不需要optional()

g.V().has("Entity","uuid","6708ec6d-4518-4159-9005-9e9d642f157e").
  project("entity","types").by().by(outE("IsOfType").fold())

结果将为类型List<Map<String, Object>>

更新

toList()下面的注释中进行了简短的讨论之后,这是如何遍历结果而不将整个对象存储在集合中的方法:

g.V().has("Entity","uuid","6708ec6d-4518-4159-9005-9e9d642f157e")
        .project("entity","types").by().by(outE("IsOfType").fold())
        .forEachRemaining(m -> {
            final Vertex entityV = (Vertex) m.get("entity");
            final List<Edge> typeE = (List<Edge>) m.get("types");
            // whatever ...
        })


 类似资料:
  • 问题内容: 我正在尝试返回刚刚用Gremlin创建的Vertex(tinkerpop格式): 我得到这个例外… 如何更改代码,使其以gremlin.structure.Vertex格式而不是DSE Graph Vertex格式返回? 我在用: 我希望可以做到这一点,否则从TitanDB进行迁移将很痛苦。 问题答案: 根据我通过jira和电子邮件与Datastax Team进行的冗长讨论, 确实可以

  • 问题内容: 在我的控制器中,我调用返回承诺的服务 在我的服务中,我通过直接将url传递给图像本身来获取图像: 所有调用都成功,并且response.data似乎保存在以下图像中: 虽然我不确定它是否确实可以,因为我无法显示它。我已经尝试过(在index.html内部) 有想法吗?是否可以从$ http.get返回实际图像并将其响应转换回图像(jpeg等) 谢谢! 问题答案: 返回的图像采用二进制编

  • 问题内容: 我做了这样的一个波纹管: 但是当我尝试通过getTemp使用temp时我得到0 我只想使用我在线程中所做的计算将其存储在某些变量中以备后用。 问题答案: 或者简单地添加 等待线程完成,然后再获得结果。 您的问题是您试图在计算结果之前获得结果。您应该等待线程完成后才能获得结果。这个答案也许不是最好的,但是是最简单的。由于其他人已经在使用Executors课程,所以我不想重复他们的答案。但

  • 问题内容: 在android中,我正在创建用于url连接的线程。在线程中,我将响应消息存储在全局声明的字符串中。当我访问method方法时,它返回null。 当我调用该方法时,它返回null。 问题答案: 您真的只想使用它,尝试一下

  • 执行javax。图像IO。ImageIO是否读取PPM格式的图像(如原始比特P6)? 没有异常,但是。其他格式如png和jpg工作正常。 我有一个尴尬的解决方法,通过去掉标头并逐行扫描ppm文件。我假设JAVA JAI(现在是JDK的一部分)会开箱即用。 我错过什么了吗?

  • 问题内容: 这可以返回一个字符串: 但是我无法获取返回的html文档。这不起作用: 很抱歉成为菜鸟! 编辑: 我已经在单独的文档中使用了html。所以我需要返回文档,或者以某种方式读取/解析它,所以我不只是重新输入所有的html … 编辑: 我的web.xml中有这个 还有其他我可以放的东西,所以它只是返回一个文件,例如… 问题答案: 您可以从Servlet本身 打印 HTML (不建议使用) 或