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

时间:2016-04-20 12:28:09

标签: json neo4j nested

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

User-[:Owner]->Item

User包含通常的属性; nameemailOwner关系有created_on属性
Item有很多关于该项目的属性; titledescription

我想为geo-location添加Item属性。这将是用户创建项目的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将geo_position Item属性下的纬度和经度数据序列化?
  2. 作为关系Owner.latitude的属性?
  3. 作为新节点? Location`用户 - [:拥有] - > Mite< - [:created_at] -Location?
  4. 由于Item的个别属性没有嵌套,item.latitude
  5. 1 - 我假设我们无法查询 2 - 感觉不是正确的地方 3 - 极不可能2 Items将具有与lat long相同的位置非常精确,因此几乎没有Items将共享此节点,所以它真的是一个节点吗?

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

1 个答案:

答案 0 :(得分:5)

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

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