我正在使用Realm.io数据库编写应用程序,该数据库将从另一个服务器数据库中提取数据。服务器数据库有一些表,其主键由多个字段组成。现在我找不到在域中指定多列键的方法,因为primaryKey()函数只返回一个String可选。
这个有效: //指数 覆盖静态函数primaryKey() - >字符串? { 返回“登录” }
但我需要的是这样的:
//index
override static func primaryKey() ->[String]?
{
return ["key_column1","key_column2"]
}
我在文档上找不到关于如何执行此操作的任何内容。
答案 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