![](/img/trans.png)
[英]Adding a new vertex and an edge to an existing vertex in Datastax CassandraCSharpDriver.Graph but get edge OUT error
[英]Get all unknown vertices connected to a known vertex with C# Datastax CassandraCSharpDriver.Graph
我正在嘗試使用 C# Datastax CassandraCSharpDriver.Graph 代碼獲取通過邊連接到已知頂點的所有未知頂點。
此 gremlin 代碼正確返回未知頂點列表以及目標已知頂點:
g.V().has("mything","key", "mykey")
.emit()
.repeat(outE("contains").inV()).valueMap(true)
我在 C# 中嘗試過這樣的遍歷但它沒有回來,我認為重復是無限的(或非常慢):
g.V()
.Has("mything", "key", "mykey")
.Emit()
.Repeat(g.V()
.Has("mything", "key", "mykey")
.OutE("contains").InV())
我正在 C# 中嘗試這樣的遍歷,但編譯器不會接受 '("query")',所以我不確定如何將遍歷放在 Repeat 子句中:
g.V()
.Has("mything", "key", "mykey")
.As("query").Emit()
.Repeat(("query").OutE("contains").InV())
重復子句的技巧是什么? 或者是否有更好的方法將所有未知頂點連接到 C# 中的已知頂點?
我認為您正在尋找匿名圖遍歷類Gremlin.Net.Process.Traversal.__
:
var graphResultSet = await session.ExecuteGraphAsync(g.V()
.Has("mything", "key", "mykey").Emit()
.Repeat(__.OutE("contains").InV())).ConfigureAwait(false);
我用這個查詢運行了一個簡單的代碼片段(如下所示),我得到了這個控制台輸出:
[label: mything; key: mykey]
[label: mything1; key: mykey15]
[label: mything1; key: mykey12]
[label: mything; key: mykey]
[label: mything1; key: mykey17]
[label: mything1; key: mykey16]
[label: mything1; key: mykey14]
[label: mything1; key: mykey13]
[label: mything1; key: mykey1]
代碼片段:
session.ExecuteGraph(new SimpleGraphStatement(
"schema.propertyKey('key').Text().ifNotExists().create();" +
"schema.edgeLabel('contains').multiple().ifNotExists().create();" +
"schema.vertexLabel('mything').properties('key').ifNotExists().create();" +
"schema.vertexLabel('mything1').properties('key').ifNotExists().create();" +
"schema.edgeLabel('contains').connection('mything', 'mything1').add();"));
var g = DseGraph.Traversal(session);
await session.ExecuteGraphAsync(g
.AddV("mything").Property("key", "mykey").As("cp")
.AddV("mything").Property("key", "mykey").As("cp1")
.AddV("mything1").Property("key", "mykey1").As("cl")
.AddV("mything1").Property("key", "mykey12").As("cl1")
.AddV("mything1").Property("key", "mykey13").As("cl2")
.AddV("mything1").Property("key", "mykey14").As("cl3")
.AddV("mything1").Property("key", "mykey15").As("cl4")
.AddV("mything1").Property("key", "mykey16").As("cl5")
.AddV("mything1").Property("key", "mykey17").As("cl6")
.AddE("contains").From("cp").To("cl")
.AddE("contains").From("cp1").To("cl1")
.AddE("contains").From("cp").To("cl2")
.AddE("contains").From("cp").To("cl3")
.AddE("contains").From("cp1").To("cl4")
.AddE("contains").From("cp").To("cl5")
.AddE("contains").From("cp").To("cl6"))
.ConfigureAwait(false);
var graphResultSet = await session.ExecuteGraphAsync(g.V()
.Has("mything", "key", "mykey").Emit()
.Repeat(__.OutE("contains").InV())).ConfigureAwait(false);
var vertices = graphResultSet.Select(elem => elem.To<Vertex>()).ToList();
Console.WriteLine(
string.Join(
Environment.NewLine,
vertices.Select(v => $"[label: {v.Label}; key: {v.GetProperty("key").Value}]")));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.