【发布时间】:2015-09-11 14:12:47
【问题描述】:
这几天,我一直在设计一个社交网络数据库结构,并一遍又一遍地优化数据结构。
我想在 Neo4j 中实现的目标:
我正在尝试在两个节点之间创建关系,该节点具有一个名为“history”的属性和一个名为“currentStatus”的属性。问题是两者都是(应该是)数组。比如:
MATCH (u:User {username: 'john.snow@gmail.com'}), (uu:User {username: 'sansa.stark@gmail.com'})
MERGE u-[rel:FRIENDSHIP]->uu
ON CREATE SET rel.previousFriendshipUpdates = [], rel.currentFriendshipStatus = [sentTime: timestamp(), status: '0']
ON MATCH SET rel.previousFriendshipUpdates = [rel.previousFriendshipUpdates + rel.currentFriendshipStatus], rel.currentFriendshipStatus = [sentTime: timestamp(), status: '1']
我想记录有关他们友谊的任何行为的历史记录(发件人在 x 时间发送了朋友请求,接收者在 x 时间拒绝了朋友请求,发件人在 x 时间(再次)发送了朋友请求,接收者在 x 时间接受了x 时间,x 时间的接收者非好友发件人等)。
提前谢谢你。
【问题讨论】:
-
你能澄清你的问题吗?
-
当然,抱歉,如果我不够明确。我的问题是如何创建一个关系,它的属性包含多维数组(历史,我将在其中保存此属性的早期版本)和另一个属性 - 单级数组,包含当前的友谊状态和时间戳。跨度>
-
Neo4j 中的数组是一维的,它们只是值的序列。解决方案是将您的模型分布在更多节点上(请参阅我的答案以获取示例)。
-
我的评论不清楚,我的意思是数组是值的序列,唯一的索引是该序列——数组中不能有键/值对或命名值。但是,您可以在数组中拥有数组,因此您当然可以以这种方式拥有多维数组。这是你想做的吗?
标签: arrays database database-design neo4j