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

Mat*_*son 6 json nested neo4j

我有一个现有的neo4j数据库,有这样的关系......

User-[:Owner]->Item
Run Code Online (Sandbox Code Playgroud)

User包含通常的属性; name,email
Owner关系具有created_on属性
Item有一堆有关该项目的属性; title,description等等.

我想添加一个geo-location属性Item.这将是一个latitudelongitude其中用户创建的项目.

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

"item": {
   "title":"my item",
   "user":{
        "name":"smith"
   }
}
Run Code Online (Sandbox Code Playgroud)

我最初认为这个位置会跟着...

"item": {
   "title":"my item",
   "user":{
        "name":"smith"
   },
   "geo_position":{
       "latitude":"10.123456789",
       "longitude":"10.123456789" 
   }
}
Run Code Online (Sandbox Code Playgroud)

由于我们无法在Neo中嵌套数据,因此想知道如何存储这些数据......

  1. JSON序列化了geo_position属性下的纬度和经度数据Item
  2. 作为关系的属性Owner.latitude
  3. 作为一个新节点?Location `用户- [:拥有] - >螨< - [:created_at] -Location?
  4. 由于个别属性Item没有嵌套,item.latitude

1 - 我假设我们无法查询.
2 - 感觉不是正确的地方.
3 - 极不可能的2 Items将具有相同的位置,因为lat long非常精确,所以几乎No Items会共享这个节点,所以它真的是一个节点吗?

那么4真的是这样做的方式,而不是嵌套它们吗?

cyb*_*sam 5

你自己的分析基本上是正确的.我会选择4号.

这里更多的是为什么2号不是一个好主意.逻辑上:项目的位置属于该项目的节点,而不是与该项目的特定关系.实际上:如果对象更改了所有权,则不必将其位置复制到新关系,并且查询项目的位置应该像获取其节点一样快速和简单.