簡體   English   中英

不了解如何在Gremlin.net中使用Tree()

[英]not understanding how to use Tree() in Gremlin.net

我正在嘗試將以下示例轉換為Gremlin.net(c#)

https://kelvinlawrence.net/book/Gremlin-Graph-Guide.html#btree

例子在Groovy中

t=g.V().hasLabel('root').repeat(out()).emit().tree().by('data').next()

文檔聲明t的類型應為

class org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree

但是我在gremlin.net中找不到任何等價的類型

Gremlin.Process.Traversal下只有一個Strategy名稱空間,我似乎在其他地方找不到任何樹類型。

我正在使用Gremlin.net運行Gremlin Server和ac#項目。

public void Test()
    {
        using(GremlinClient client = GetClient())
        {
            using (DriverRemoteConnection conn = GetDriverRemoteConnection(client))
            {
                Graph graph = new Graph();
                GraphTraversalSource g = graph.Traversal().WithRemote(conn);

                // Builds a small ordered Binary (BST) Tree
                g.AddV("root").Property("data", 9).As("root")
                    .AddV("node").Property("data", 5).As("b")
                    .AddV("node").Property("data", 2).As("c")
                    .AddV("node").Property("data", 11).As("d")
                    .AddV("node").Property("data", 15).As("e")
                    .AddV("node").Property("data", 10).As("f")
                    .AddV("node").Property("data", 1).As("g")
                    .AddV("node").Property("data", 8).As("h")
                    .AddV("node").Property("data", 22).As("i")
                    .AddV("node").Property("data", 16).As("j")
                    .AddE("left").From("root").To("b")
                    .AddE("left").From("b").To("c")
                    .AddE("right").From("root").To("d")
                    .AddE("right").From("d").To("e")
                    .AddE("right").From("e").To("i")
                    .AddE("left").From("i").To("j")
                    .AddE("left").From("d").To("f")
                    .AddE("right").From("b").To("h")
                    .AddE("left").From("c").To("g").Iterate();
                //the .Tree() step requires either a string argument (I believe as a step label), or can be used taking a Generic .Tree<someType>() but I do not know what type to declare to match the example.
                var tree = g.V().HasLabel("root").Repeat(__.Out()).Emit().Tree("a").By("data").Next();

                Type x = tree.GetType();
                // x == {Gremlin.Net.Structure.Vertex}
            }
        }
    }

我想念什么?

我認為您遇到了在完整的Gremlin虛擬機(即Java)范圍內開發的Gremlin和作為Gremlin語言變體的Gremlin之間存在的剩余矛盾之一-在您的情況下為Gremlin.NET。 我不認為tree()在任何GLV中都沒有完全支持。 有趣的是,您表明您將獲得Vertex返回,因為我不希望Gremlin.NET甚至不知道如何反序列化g:Tree,因為我曾期望某種形式的序列化錯誤。 即使這樣做,.NET中也沒有Tree對象可將其反序列化為。

我似乎還記得,關於tree()和序列化的問題雖然更深了,並且根植於Jackson庫中的某些問題,但是這些問題現在有可能在最近的一段時間內得到解決。

注意,由於subgraph() step會遇到類似的限制,因為GLV端沒有Graph對象可將其反序列化為該對象。 我想知道在這些情況下我們是否至少不能默認返回原始JSON本身。 手動解析不會很有趣,但是在某些用例中可能總比沒有好。

我為持續跟蹤TINKERPOP-2063創建了此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM