React Native 使用realm创建文档时遇到问题,该文档与另一个集合中的相关文档有连接

eqoofvh9  于 2023-05-18  发布在  React
关注(0)|答案(1)|浏览(106)

我有一个人,有一个相关的“标签”的集合。每个人可以有多个标签。
我已经找到了文档的关系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中已经存在的相同标记。而不是创建它,我需要连接两者。我该怎么做?

p8h8hvxi

p8h8hvxi1#

领域对象可以在领域内变异。直接写函数。所以在这个例子中,我把标签和人联系起来的方法是这样的。

const person = realm.write(() => {
        const realmPerson = new People(realm, {
          email,
          name,
          org_id: org._id,
        });
        
        person.tags = [{ _id: `${org._id}-2021` }];
        return realmPerson;
    });

由于_id是主键字段,Realm只知道这些对象是链接的,现在如果我稍后调用person.tags,我实际上得到了包含所有对象属性的整个标签数组,而不仅仅是_id字段。

相关问题