首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绿蓝宇宙graphSON复杂物体

绿蓝宇宙graphSON复杂物体
EN

Stack Overflow用户
提问于 2018-07-22 04:05:23
回答 1查看 929关注 0票数 0

我很难理解用gremlin语法返回数据的方法,当您有一些顶点组合在一起创建一个复杂的对象时。

下面的语法将是与gremlin.net一起使用的gremlin语法,用于访问cosmos db -因此graphSON通过cosmos返回,然后我的POCO对象使用C#语法。

假设我有一个更像树的例子,所有的东西都是相关的,但我不想要重复的数据。所以如果我有财产的话-就像个房客。你有属性顶点,房间顶点,人顶点。如果我正在做一个标准的C# POCO,它看起来可能如下所示:

代码语言:javascript
复制
public class Property{
   public List<Room> Rooms {get;set;}
   public List<Person> Managers {get;set;}
   //additional general properties of the property - name, address, etc
}

public class Room {
   public List<Person> Tenants {get;set;}
   //other room properties - number, size, etc
}

public class Person{
    //general properties - name, age, gender, etc
}

因此,我一直试图在graphSON语法中复制这种结构,但是一旦我降低了一个级别,就不会真的这样做了--至少我还没有找到任何例子。当返回时,我希望能够让graphSON看起来更像这样:

代码语言:javascript
复制
"property":{
   "basic":{
      //the property vertex
    },
    "managers":[ //array of managers
       "manager":{
          //person vertex
       }
    ],
   "rooms":[ //array of rooms
        "room":{
          //a room vertex
         },
        "tenants":[
          {
            "tenant":{
               //person vertex
            }
          }
        ]
    ]
}

另一个警告是,通常我可能希望返回某些属性,或者只返回部分,而不是整个顶点--所以最有可能的是valueMap或类似的东西。

我已经尝试过sideEffects,flatMap,地图,本地的各种方法来看我是否能得到它,但是它似乎总是很快就崩溃了。

如果我打这样的电话:

代码语言:javascript
复制
g.V('my-key').as('property').flatmap(out('a-room')).as('r').select('property','r')

我会得到更像这样的东西作为回报:

代码语言:javascript
复制
[
  {
    "property":{} //property vertex
    "r":{}//a room vertex
  },
  {
    "property":{} //property vertex
    "r":{}//a room vertex
  },
  //repeat until you have all rooms
]

这会导致大量额外的数据返回,因为我只需要属性信息一次。

代码语言:javascript
复制
g.V('my-key').as('p').local(out('a-room').fold()).as('r').unfold().local(out('a-tenant').fold()).as('t').select('p','r','t')

这会再次造成重复的数据,并将所有的数据保持在一个级别以下,而不是子级别。

所以我的问题是:我提议的graphSON格式可能吗?

当我试图提取数据时,我是不是想错了?这是我在图形Is中所做的不寻常的事情,因为我很难找到这种具有多个层次的单到多个关系来创建一个复杂的对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-22 10:33:53

当询问Gremlin的问题时,最好是包含一个简短的Gremlin脚本,它可以创建一些示例数据,因为它使回答者非常容易地为您提供一个精确的/经过测试的遍历,可以解决您的问题(示例)。

至于您的问题,您肯定可以以任何形式返回所需的数据。在关于TinkerPop的集合文档中阅读此菜谱可能会有所帮助。在您的例子中,我认为您只需要嵌套的project()类型的遍历:

代码语言:javascript
复制
g.V("my-key").
  project('name','address', 'rooms')
    by('name').
    by('address').
    by(out('a-room').
       project('number','size','tenantCount')
         by('number').
         by('size').
         by(out('a-tenant').count()).
       fold())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51461942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档