Realm.js:将非结构化对象存储为属性

时间:2016-07-21 13:50:37

标签: react-native realm

我们有一个内容交付应用程序,我们将JSON上的对象置于动态结构中。 React Native使用JSON,并从这些对象构建用户界面。

这是我现在正在使用的架构:

const CardSchema = {
    name: 'Card',
    properties: {
        id: 'string',
        cardSubType: 'string',
        cardType: 'string',
        state: 'string',
        contentType: 'string',
        context: {},
    },
};

字段context是动态部分。它基本上是一个可以包含任意数量字段的对象。我们在编译时不知道哪些字段在那里。

我们希望使用realm.js来保存我们的数据,因为它很好而且快速,我们可以在编译时模块化99%的对象。

我们想要存储任何对象,只是这一个领域(以及其他一些领域)。

Rem Native可以使用Realm吗?或者我需要将其建模为字符串并在加载时进行存储和反序列化时进行序列化?

1 个答案:

答案 0 :(得分:4)

Realm尚不支持存储词典/动态对象。这绝对是路线图上的一点,因为能够简单地存储和检索JSON对象是非常自然的。在完全支持字典之前,您需要将数据存储为您建议的字符串,或者创建自己的JSON模型。像

这样的东西
const UNDEFINEDTYPE = 0;
const INTTYPE = 1;
const STRINGTYPE = 2;

const JSONValueSchema = {
    name: 'JSONValue',
    properties: {
        type: 'int',
        stringValue: { type: 'string', optional: true },
        intValue:    { type: 'int', optional: true },
        jsonValue:   { type: 'JSON', optional: true },        
    }
};

const JSONEntrySchema = {
    name: 'JSONEntry',
    properties: {
        key: 'string',
        value: 'string'
    }
};

const JSONSchema = {
    name: 'JSON',
    properties: {
        entries: { type: 'list', objectType: 'JSONEntry' }
    }
}

执行此操作会有点冗长,但它允许您将查询系统与keyPath查询完全一起使用,其中存储JSON blob会强制您使用CONTAINS查询。不确定是否所有的努力都值得你的申请。