将序列化数据存储在Neo4j中的对象中

时间:2011-10-05 03:28:00

标签: arrays serialization neo4j

我刚刚将我的Rails应用程序从MySql迁移到Neo4j。我已将用户网站列表存储为我的数据库中的序列化字符串(例如User.websites =“www.facebook.com”,“www.twitter.com”等)。

当我尝试创建或更新该属性时,我收到以下错误:

  

RuntimeError(不允许存储值为...的数组

在Neo4j中存储阵列或序列化数据的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

这在很大程度上取决于您以后想要使用此数据做什么。这个网站对您的数据模型有意义吗?或只是记录东西?

在案例1中,所以如果您的模型有意义。我的建议是有这样的用户--- [related_to] --->网站(URL:字符串)

在案例2中,它们可以只是用户节点内的一个字符串数组。正如您在Neo4j api documentation中所看到的,您可以将属性存储为下一组类型:

  • 布尔值或布尔值[]
  • 字节或字节[]
  • 短或短[]
  • int或int []
  • 长或长[]
  • float或float []
  • double或double []
  • char或char []
  • java.lang.String或String []

    • purbon

答案 1 :(得分:0)

除了上面的讨论,这里还有一个序列化的示例方法(http://gist.github.com/1674551

neo4jhelpers.rb

module Neo4j
  module TypeConverters
    class SerializeConverter
      # serializes to sting
      class << self

        def convert?(type)
          type == :serialize
        end

        def to_java(value)
          return nil unless value
          JSON.generate(value).to_s
        end

        def to_ruby(value)
          return nil unless value
          JSON.parse(value.to_s)
        end
      end

    end
  end
end

Neo4j::TypeConverters.converters = nil # reload converters