Neo4j:存储嵌套属性的最佳替代方案?

12

我有一个已经存在的、带有类似以下关系的Neo4j数据库...

User-[:Owner]->Item

User包含通常的属性; nameemail等。
Owner关联有created_on属性。
Item有关于该物品的一些属性; titledescription等。

我想为Item添加一个geo-location属性。 这将是用户创建物品时的latitudelongitude

JSON api为我们的客户提供此数据。 API将合并一些数据,因此api中的Item对象将具有作为其属性的嵌套User对象...

"item": {
   "title":"my item",
   "user":{
        "name":"smith"
   }
}

一开始我认为地点会跟随相同的方式...

"item": {
   "title":"my item",
   "user":{
        "name":"smith"
   },
   "geo_position":{
       "latitude":"10.123456789",
       "longitude":"10.123456789" 
   }
}

由于Neo不支持嵌套数据,想知道如何存储这些数据...

  1. 将纬度和经度数据序列化为JSON,并放在Itemgeo_position属性下?
  2. 作为关系Owner.latitude的属性?
  3. 作为一个新节点?Location `User-[:owns]->Mite<-[:created_at]-Location?
  4. 作为Item的单独属性,因此不会嵌套,item.latitude

1- 我假设我们不能查询。
2- 感觉不是正确的位置。
3- 由于纬度和经度非常精确,所以几乎没有Items会共享此节点,因此这是否真的是一个节点?

那么4是真正的方法,只是不要嵌套它们吗?

m

1个回答

9
您的分析基本上是正确的。我会选择第四个选项。
以下是有关为什么第二个选项不是一个好主意的更多信息。逻辑上:物品的位置应该属于该物品的节点,而不是与其特定关系中的位置。实际上:如果对象改变了所有权,则不应将其位置复制到新关系中,并且查询物品位置应该像获取其节点一样快速简单。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接