Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure cosmosdb 小精灵天蓝宇宙图复杂物体_Azure Cosmosdb_Gremlin - Fatal编程技术网

Azure cosmosdb 小精灵天蓝宇宙图复杂物体

Azure cosmosdb 小精灵天蓝宇宙图复杂物体,azure-cosmosdb,gremlin,Azure Cosmosdb,Gremlin,我很难理解当顶点组合起来创建一个复杂对象时,如何用gremlin语法返回数据 我下面的语法将是gremlin.net用来访问cosmos数据库的gremlin语法,因此graphSON通过cosmos返回,然后我的POCO对象是C#语法 假设我有一个更像一棵树的例子,所有的东西都是相关的,但我不想要重复的数据。如果我有一个属性,比如apt,你有属性顶点,房间顶点,人物顶点。如果我在做一个标准的C#POCO,它可能看起来像这样: public class Property{ public L

我很难理解当顶点组合起来创建一个复杂对象时,如何用gremlin语法返回数据

我下面的语法将是gremlin.net用来访问cosmos数据库的gremlin语法,因此graphSON通过cosmos返回,然后我的POCO对象是C#语法

假设我有一个更像一棵树的例子,所有的东西都是相关的,但我不想要重复的数据。如果我有一个属性,比如apt,你有属性顶点,房间顶点,人物顶点。如果我在做一个标准的C#POCO,它可能看起来像这样:

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
}
g.V('my-key').as('property').flatmap(out('a-room')).as('r').select('property','r')
另一个警告是,通常我可能希望返回某些属性,或者只返回部分属性,而不是整个顶点-因此最有可能是valueMap或类似的内容。
我试过各种各样的方法来尝试副作用,平面图,地图,本地,看看我是否能得到它,但它似乎总是很快就崩溃了

如果我这样打电话:

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
}
g.V('my-key').as('property').flatmap(out('a-room')).as('r').select('property','r')
我会得到更像这样的回报:

[
  {
    "property":{} //property vertex
    "r":{}//a room vertex
  },
  {
    "property":{} //property vertex
    "r":{}//a room vertex
  },
  //repeat until you have all rooms
]
这会导致返回大量额外数据,因为我只需要一次属性信息

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格式可行吗?
当我试图收回数据时,我是否以错误的方式思考?
这是我在GraphDB上做的不常见的事情,因为我很难找到这种类型的单对多关系和多个级别来创建复杂的对象

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

至于你的问题,你完全可以以任何形式返回你需要的数据。在上的TinkerPop文档中阅读此配方可能会有所帮助。在您的情况下,我认为您只需要一个嵌套的
project()
遍历类型:

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())

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

至于你的问题,你完全可以以任何形式返回你需要的数据。在上的TinkerPop文档中阅读此配方可能会有所帮助。在您的情况下,我认为您只需要一个嵌套的
project()
遍历类型:

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())

非常感谢你!在这样的背景下看它确实有助于我更好地理解项目以及如何使用它。我将确保下次为示例数据包含一个脚本。谢谢你的帮助和收藏文档的链接。非常感谢!在这样的背景下看它确实有助于我更好地理解项目以及如何使用它。我将确保下次为示例数据包含一个脚本。感谢您的帮助和到收藏文档的链接。