Azure 在CosmosDB中将顶点存储为JSON

Azure 在CosmosDB中将顶点存储为JSON,azure,graph-databases,gremlin,azure-cosmosdb,Azure,Graph Databases,Gremlin,Azure Cosmosdb,我看到的所有使用gremlinapi查询CosmosDB图的示例都使用具有一级属性的顶点。但是,如果我们想将顶点表示为JSON文档呢 user.name = "Mike" user.location.lat = "37.7749" user.location.lng = "122.4194" 有时,嵌套特性应拆分为单独的顶点并通过边链接,但这通常是不必要的 对此,推荐的方法是什么?是否应该有一个适配器类在顶点进入和离开DB时展平/取消展平它们?这看起来很简单,但在性能方面非常昂贵。有一种方法可

我看到的所有使用gremlinapi查询CosmosDB图的示例都使用具有一级属性的顶点。但是,如果我们想将顶点表示为JSON文档呢

user.name = "Mike"
user.location.lat = "37.7749"
user.location.lng = "122.4194"
有时,嵌套特性应拆分为单独的顶点并通过边链接,但这通常是不必要的


对此,推荐的方法是什么?是否应该有一个适配器类在顶点进入和离开DB时展平/取消展平它们?这看起来很简单,但在性能方面非常昂贵。

有一种方法可以使用Gremlin API和Cosmos DB支持编写嵌套属性。但是,这种模式的要求并没有按照您描述的方式映射到JSON文档格式

Gremlin顶点属性可以具有每个关键点的多个值,以及每个值的元属性(也称为嵌套属性)

我建议你读书

以下是如何通过gremlin将嵌套特性添加到顶点特性:

g.V('vertex_id').property('name', 'marko') // (1)
g.V('vertex_id').properties('name').hasValue('marko').property('metaprop', 'value') // (2)
(1) -添加顶点属性(“名称”、“标记”) (2) -在('name','marko)属性上添加嵌套属性

下面是json文档的一个示例,它将使用vertex属性模式存储在CosmosDB中:

{
  id: <ID>,
  label: 'person',
  name: [{
    id: <ID>,
    _value: 'marko',
    _meta : {
      metaprop: 'value'
    }
  }],
  address: [
    {
      id: <ID>,
      _value: 'street 1',
      _meta: {
        type: 'street',
        somethingElse: 'value'
      }
    },
    {
      id: <ID>,
      _value: 'new york',
      _meta: {
        type: 'city',
        anotherMeta: 'something'
      }
    }
  ]
}
{
id:,
标签:“人”,
姓名:[{
id:,
_值:“marko”,
_元:{
metaprop:“值”
}
}],
地址:[
{
id:,
_价值:'街道1',
_元:{
类型:'街道',
有些东西是:“价值”
}
},
{
id:,
_值:“纽约”,
_元:{
类型:'城市',
anotherMeta:“有东西”
}
}
]
}

谢谢,我不知道顶点属性。但是,对于我的用例来说,这似乎还不够,因为我仍然需要编写一个适配器来在原始JSON和该结构之间进行转换。另外,我不知道是否可以在嵌套属性上创建索引,这是我需要的。澄清一下:如果您的目标是将原始JSON摄取到CosmosDB图形顶点中,那么您是正确的,当前的支持将要求您调整数据模型以适应Gremlin顶点结构。您是否有可以共享的JSON文档示例/示例?我们的目标是支持一种格式,使使用Gremlin编写/读取JSON更容易/更流畅,并避免特定的模式要求。这项工作正在进行中,我们将在将来提供更多详细信息。嗨,Olivier,我不能提供示例数据,但我会参考ArangoDB提供的graph API。它非常简单,让我们传递任何有效的JSON来创建一个新的顶点:我有一个原始JSON,我不需要查询,但需要持久化,我认为如果顶点可以保存JSON,那就太好了,我遇到了一个阻碍,因为JSON中嵌入了已经转义的字符