我有以下图形结构:
顶点—— Activity 、项目、领导
{"Name":["CompanyV"],"sid":["SidFromSQL"]}
{"name":["Campaign3V"],"status":["paused"]}
{"name":["Campaign1"],"startDate":["Jan 1, 2019 5:30:00 AM"]}
{"name":["Campaign2V"],"status":["active"]}
{"name":["Lead11V"]}
{"name":["Lead2V"]}
{"name":["Project1V"],"Name":[""],"sid":["SidFromSQL"]}
{"name":["Project2V"],"Name":[""],"sid":["SidFromSQL"]}
{"name":["Lead3V"]}
{"name":["Campaign1V"],"status":["active"]}
边缘:
{"inVertex":{"id":"58b6e79f-6809-6fc4-9f0a-c8a26337a729","label":"Campaign"},"outVertex":{"id":"1cb6e79d-1ca7-4d3c-e71d-c05c13abac15","label":"Project"},"id":"a6b6e79f-6809-87bf-a535-eec9101e683c","label":"hasCampaign"}
{"inVertex":{"id":"c4b6e7ae-64d3-b8b9-ce7b-c319e7ed70ca","label":"Lead"},"outVertex":{"id":"1cb6e79d-1ca7-4d3c-e71d-c05c13abac15","label":"Project"},"id":"6cb6e7ae-64d4-6fb0-9314-411eb72d9a28","label":"hasLead"}
{"inVertex":{"id":"a2b6e79d-1ca7-db4e-f19f-2ef1df514ade","label":"Project"},"outVertex":{"id":"64b6e79c-d58b-37ad-6c3e-63a783e6df97","label":"Company"},"id":"4eb6e7a8-451f-4365-1d79-d5d118b5ff56","label":"hasProject"}
{"inVertex":{"id":"c4b6e7ae-64d3-b8b9-ce7b-c319e7ed70ca","label":"Lead"},"outVertex":{"id":"58b6e79f-6809-6fc4-9f0a-c8a26337a729","label":"Campaign"},"id":"96b6e7ae-64d4-b918-353d-fccc13cbd9bb","label":"hasLead"}
{"inVertex":{"id":"94b6e79f-69b9-ccfe-d9e6-a41c4be59979","label":"Campaign"},"outVertex":{"id":"a2b6e79d-1ca7-db4e-f19f-2ef1df514ade","label":"Project"},"id":"34b6e79f-69b9-bd15-9331-0551c464f222","label":"hasCampaign"}
{"inVertex":{"id":"36b6e7b2-3d78-3229-9ebd-05c2c5f5927b","label":"Lead"},"outVertex":{"id":"1cb6e79d-1ca7-4d3c-e71d-c05c13abac15","label":"Project"},"id":"c2b6e7b2-3d78-16d0-ee95-46b66108236e","label":"hasLead"}
{"inVertex":{"id":"36b6e7b2-3d78-3229-9ebd-05c2c5f5927b","label":"Lead"},"outVertex":{"id":"58b6e79f-6809-6fc4-9f0a-c8a26337a729","label":"Campaign"},"id":"04b6e7b2-3d79-3d95-855e-a206d38b8603","label":"hasLead"}
{"inVertex":{"id":"1cb6e79d-1ca7-4d3c-e71d-c05c13abac15","label":"Project"},"outVertex":{"id":"64b6e79c-d58b-37ad-6c3e-63a783e6df97","label":"Company"},"id":"ccb6e7a8-449b-d92c-1330-4f6288ab0852","label":"hasProject"}
{"inVertex":{"id":"7eb6e7dc-94f9-ca83-df4c-87284897151f","label":"Lead"},"outVertex":{"id":"1cb6e79d-1ca7-4d3c-e71d-c05c13abac15","label":"Project"},"id":"d2b6e7dc-94fb-8219-30a2-d304ccaed75d","label":"hasLead"}
{"inVertex":{"id":"d0b6e79f-692a-8c03-112e-9388e54b1f9d","label":"Campaign"},"outVertex":{"id":"1cb6e79d-1ca7-4d3c-e71d-c05c13abac15","label":"Project"},"id":"3cb6e79f-692b-4cad-48ac-1e4991e75b60","label":"hasCampaign"}
我正在运行以下查询来获取与项目和特定 Activity 相关的潜在客户。
GraphTraversal t =g.V("1cb6e79d-1ca7-4d3c-e71d-c05c13abac15").out("hasLead")
.where(in("hasLead").has("Campaign","name","Campaign1V"));
这将在输出中返回有关潜在客户的信息,我想知道是否有一种方法可以获取特定的营销 Activity 信息以及输出响应中的 ID 信息(使用单个遍历语句),以便 UI 组件可以利用它在 HTML 中呈现。
最佳答案
您只需将结果转换为您想要的形式即可。在这种情况下,您可以使用类似 project()
g.V("1cb6e79d-1ca7-4d3c-e71d-c05c13abac15").out("hasLead").
where(__.in("hasLead").has("Campaign","name","Campaign1V")).
project('lead','campaign').
by().
by(__.in("hasLead").has("Campaign","name","Campaign1V").fold())
您可能希望在第一个 by()
调制器中包含一些内容,以进一步将顶点转换为您想要的属性,并且您可能也希望对第二个调制器执行相同的操作。此外,仅当每个潜在客户有多个广告系列时才需要 fold()
。
所以,上面的代码工作得很好并且很容易理解,但它确实遍历了相同的“hasLead”边两次。您可以避免这种情况,但它会给可读性增加一些误导,您必须决定是否可以忍受:
g.V("1cb6e79d-1ca7-4d3c-e71d-c05c13abac15").out("hasLead").
project('lead','campaign').
by().
by(__.in("hasLead").has("Campaign","name","Campaign1V").fold()).
filter(select('campaign').unfold())
现在,您计划所有“潜在客户”,但过滤掉“营销 Activity ”列表为空的任何潜在客户。
关于java - 编译 gremlin 遍历查询的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58445446/