在realm.io中具有多个键列的对象

时间:2015-07-18 10:36:48

标签: realm

我正在使用Realm.io数据库编写应用程序,该数据库将从另一个服务器数据库中提取数据。服务器数据库有一些表,其主键由多个字段组成。现在我找不到在域中指定多列键的方法,因为primaryKey()函数只返回一个String可选。

这个有效:     //指数     覆盖静态函数primaryKey() - >字符串?     {         返回“登录”     }

但我需要的是这样的:

//index
override static func primaryKey() ->[String]?
{
    return ["key_column1","key_column2"]
}

我在文档上找不到关于如何执行此操作的任何内容。

3 个答案:

答案 0 :(得分:4)

在Realm中无法提供多个属性作为主键。目前,您只能指定一个。

您是否可以使用这两列中的信息来创建一个可以替代使用的唯一值?

答案 1 :(得分:1)

它不是原生支持,但有一个不错的解决方法。您可以添加另一个包含复合键的属性,并将该属性作为主键。

在github上查看此对话,了解更多详情https://github.com/realm/realm-cocoa/issues/1192

答案 2 :(得分:0)

从概念上讲,您可以使用从两个或多个字段驱动的哈希方法来执行此操作。 假设这两个字段“名称”和“姓氏”用作多个主键。这是一个示例伪代码:

StudentSchema = {    
    name: 'student',
    primaryKey: 'pk',
    properties: {
        pk: 'string',
        name: 'string',
        lastname: 'string',
        schoolno: 'int'
    }
};
...
...
// Create a hash string drived from related fields. Before creating hash combine the fields in order.
myname="Uranus";
mylastname="SUN";
myschoolno=345;
hash_pk = Hash( Concat(myname, mylastname ) ); /* Hash(myname + mylastname) */
// Create a student object
realm.create('student',{pk:hash_pk,name:myname,lastname:mylastname,schoolno: myschoolno});

如果需要ObjectId,则转到Convert string to ObjectID in MongoDB