我正在使用TinkerPop3 Java将信息从另一个数据库迁移到Tinkerpop数据库。我在单个顶点中存储了大量ID,我需要将其转换为两个顶点之间的边。
假设我运行以下代码来创建Modern玩具图,并添加josh的属性“ friend”,以及其朋友“ marko”的相应名称。
graph = TinkerFactory.createModern()
g = graph.traversal()
g.V().has("name","josh").property("friend","marko")
我想要的是一个查询,该查询将以编程方式找到具有“ friend”属性的所有顶点,找到名称匹配的相应顶点,并在它们之间创建一个标记为“ friends”的边。理想情况下,这将是一个查询,因为我必须扫描大量的顶点。
以下查询将查找具有朋友的顶点以及这些朋友的名字,但是我不知道如何在不将搜索分为多个查询的情况下找到具有匹配名称的顶点。
g.V().has("friend").as("a").values("friend").as("b").select("a","b")
谢谢!
答案 0 :(得分:0)
我发现以下工作有效:
g.V().has("friend").as("x").
V().has("name").where(eq("x")).by("name").by("friend").
as("y").
addE("friends").from("x").to("y")
从此处找到的答案中得到启发:https://groups.google.com/forum/#!msg/gremlin-users/l-Xtknn3Loo/0SljkNFiDQAJ;context-place=forum/gremlin-users
说明:该查询正在查找一系列带有朋友的节点,并将其标记为“ x”。然后,它将查看所有具有名称的节点,如果它们匹配则将它们标记为“ y”-也就是说,如果它们的名称与“ x”的好友属性匹配。 (这就是两个.by()语句所做的事情)。然后在它们之间创建一条边缘。