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

Neo4j 使用Gremlin和Azure Cosmos Graph在顶点中存储列表,neo4j,azure-cosmosdb,graph-databases,gremlin,tinkerpop,Neo4j,Azure Cosmosdb,Graph Databases,Gremlin,Tinkerpop,我试图在顶点本身中存储对顶点所做更改的列表。理想情况下,我想要这样的东西: { “id”:“95fcfa87-1c03-436d-b3ca-340cea926ee9”, “标签”:“人”, “类型”:“顶点”, “日志”:[{ “用户”:user@user.dk", “行动”:“更新”, “时间戳”:“22-03-2017”, “字段”:“名字”, “oldValue”:“Marco” } ] } 使用这种方法链我能够实现以下结构 graph.addV('person')) .property

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

{
“id”:“95fcfa87-1c03-436d-b3ca-340cea926ee9”,
“标签”:“人”,
“类型”:“顶点”,
“日志”:[{
“用户”:user@user.dk",
“行动”:“更新”,
“时间戳”:“22-03-2017”,
“字段”:“名字”,
“oldValue”:“Marco”
}
]
}
使用这种方法链我能够实现以下结构

graph.addV('person'))
.property('firstName','Thomas')
.属性(列表“日志”,“22-03-2017”)
.properties('日志')
.hasValue('22-03-2017'、'21-03-2017')
.property('用户','user@user.dk')
.property('操作','更新')
.property('字段','名字')
.property('oldValue','Marco')
然而,这似乎过于复杂,因为我必须存储一个值并向其添加属性。

是否可以使用上述数据添加匿名对象(即没有
id
value
)呢?

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

类似于以下内容的内容应该与您要求的结构大致相同:

dynamic entry=new JObject();
entry.user=”user@user.dk";
entry.action=“更新”;
entry.timestamp=“22-03-2017 12:34:56”;
entry.field=“firstName”;
entry.oldValue=“马可”;
graph.addV('人')
.property('firstName','Thomas')
.property(列表'log',条目.ToString());

这些日志条目可以很容易地读取、反序列化、使用和显示,但对可查询性没有多大作用。

一个有趣的想法,但是我们需要能够查询它。将Gremlin vertex属性与list和meta属性一起使用是在顶点上也可以查询的更复杂实体的唯一方法。要记住的一点是顶点大小限制为2MB(实际存储在COSMODB中的顶点大小与顶点响应的大小不同),因此如果日志数据预期在没有定期清理的情况下生长,那么您可能需要考虑不同的数据模型(也许日志数据块存储在单独的顶点中)。@奥利弗特沃斯谢谢你,说得好。在一个大小有限的结构中拥有一个实际上是无限的列表听起来是个坏主意。如果你用这个来创建一个答案,我可以接受。
{
    "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"
                }
            }
        ]
    }
}
{
    "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\"}"
            }
        ]
    }
}