使用 Gremlin 和 Azure Cosmos Graph 在顶点中存储列表



我正在尝试在顶点本身中存储对顶点所做的更改列表。理想情况下,我想要这样的东西:

{
"id": "95fcfa87-1c03-436d-b3ca-340cea926ee9",
"label": "person",
"type": "vertex",
"log": [{
"user": "user@user.dk",
"action": "update",
"timestamp": "22-03-2017",
"field": "firstName",
"oldValue": "Marco"
}
]
}

使用这种方法链,我能够实现以下结构

graph.addV('person')
.property('firstName', 'Thomas')
.property(list, 'log', '22-03-2017')
.properties('log')
.hasValue('22-03-2017', '21-03-2017')
.property('user','user@user.dk')
.property('action', 'update')
.property('field', 'firstName')
.property('oldValue', 'Marco')
{
"id": "95fcfa87-1c03-436d-b3ca-340cea926ee9",
"label": "person",
"type": "vertex",
"properties": {
"firstName": [{
"id": "f23482a9-48bc-44e0-b783-3b74a2439a11",
"value": "Thomas"
}
],
"log": [{
"id": "5cfa35e1-e453-42e2-99b1-eb64cd853f22",
"value": "22-03-2017",
"properties": {
"user": "user@user.dk",
"action": "update",
"field": "firstName",
"oldValue": "Marco"
}
}
]
}
}

然而,这似乎过于复杂,因为我将不得不存储一个值并向其添加属性。
是否可以使用上述数据添加匿名对象(即没有idvalue)?

不是在历史日志中存储正确对象的实际解决方案,但是如果您只是将其用作日志而不必通过其属性访问或查询它,则可以将序列化的JSON放在值中?

类似这些行的内容应该与您请求的结构近似:

dynamic entry = new JObject();
entry.user = "user@user.dk";
entry.action = "update";
entry.timestamp = "22-03-2017 12:34:56";
entry.field = "firstName";
entry.oldValue = "Marco";
graph.addV('person')
.property('firstName', 'Thomas')
.property(list, 'log', entry.ToString());
{
"id": "95fcfa87-1c03-436d-b3ca-340cea926ee9",
"label": "person",
"type": "vertex",
"properties": {
"firstName": [{
"id": "f23482a9-48bc-44e0-b783-3b74a2439a11",
"value": "Thomas"
}
],
"log": [{
"id": "5cfa35e1-e453-42e2-99b1-eb64cd853f22",
"value": "{"user":"user@user.dk","action":"update","timestamp":"22-03-2017","field":"firstName","oldValue":"Marco"}"
}
]
}
}

这些日志条目可以轻松读取、反序列化、使用和呈现,但对可查询性没有太大作用。

最新更新