我使用gremlin API查询CosmosDB图的所有示例都使用具有一级属性的顶点。但是,如果我们想将顶点表示为JSON文档呢?
user.name = "Mike"
user.location.lat = "37.7749"
user.location.lng = "122.4194"
有时嵌套属性应该作为单独的顶点拆分并通过边连接,但通常这是不必要的。
建议的方法是什么?是否应该只有一个适配器类在进入和离开数据库时展平/取消平顶?这似乎很简单,但在性能方面却非常昂贵。
答案 0 :(得分:4)
有一种方法可以使用Gremlin API编写嵌套属性,并且Cosmos DB支持。但是,此方案的架构要求不会按照您描述的方式映射到JSON文档格式。
Gremlin顶点属性可以为每个键设置多个值,以及每个值的元属性(也称为嵌套属性)。
我建议您阅读Tinkerpop reference on Vertex Properties
以下是如何通过gremlin将嵌套属性添加到顶点属性:
g.V('vertex_id').property('name', 'marko') // (1)
g.V('vertex_id').properties('name').hasValue('marko').property('metaprop', 'value') // (2)
(1) - 添加顶点属性(' name',' marko) (2) - 在(' name',' marko)属性上添加嵌套属性
以下是将使用顶点属性架构存储在CosmosDB中的json文档的示例:
{
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'
}
}
]
}