我有一个人,有一个相关的“标签”的集合。每个人可以有多个标签。
我已经找到了文档的关系CRUD部分,但是它跳过了如何实际编写代码来连接两个文档的部分。
下面是我的人员模式的简化版本。
export class People extends Realm.Object<People> {
_id!: string;
name: string;
email?: string;
tags?: Realm.List<Tags>;
org_id!: string;
static schema: Realm.ObjectSchema = {
primaryKey: '_id',
name: 'people',
properties: {
_id: {
type: 'string',
default: () => new Realm.BSON.ObjectID().toHexString(),
},
name: 'string',
email: 'string?',
createdAt: { type: 'date', default: () => new Date() },
tags: 'tags[]',
org_id: 'string',
},
};
}
这是我的标签模型
export class Tags extends Realm.Object<Tags> {
_id!: string;
name: string;
org_id: string;
static schema: Realm.ObjectSchema = {
primaryKey: '_id',
name: 'tags',
properties: {
_id: {
type: 'string',
},
name: 'string',
is_active: { type: 'bool', default: true },
org_id: 'string',
},
};
}
下面是我添加一个带有一个标签的新人的代码。
const person = realm.write(() => {
return new People(realm, {
email,
name,
org_id: org._id,
tags: [{ _id: `${org._id}-2021` }],
});
});
我得到错误"Exception in HostFunction: Attempting to create an object of type ‘tags’ with an existing primary key value ‘‘id123-2021’’
这是因为realm正在尝试创建DB中已经存在的相同标记。而不是创建它,我需要连接两者。我该怎么做?
1条答案
按热度按时间p8h8hvxi1#
领域对象可以在领域内变异。直接写函数。所以在这个例子中,我把标签和人联系起来的方法是这样的。
由于_id是主键字段,Realm只知道这些对象是链接的,现在如果我稍后调用person.tags,我实际上得到了包含所有对象属性的整个标签数组,而不仅仅是_id字段。