允许用户在 Realm Sync 中读取多个分区

Allow users to read multiple partitions in Realm Sync

我正在尝试学习和设置 Realm Sync。我已经设置了一个数据库和一个反应本机项目来连接到它。我的数据库应该有 public 数据,每个人都应该能够阅读,以及用户特定的数据。据我所知,您可以使用同步规则管理访问。我当前的规则是:

阅读:

{
  "$or": [
    {
      "%%user.id": "%%partition"
    },
    {
      "%%partition": "PUBLIC"
    }
  ]
}

写入:

{
  "%%user.id": "%%partition"
}

不知何故,这些规则并没有像预期的那样发挥作用。当使用用户 id 作为分区值时,我收到了来自用户的数据,而不是 public 的数据。换句话说,当使用 PUBLIC 作为分区值时,我只收到 public 数据,而不是用户数据。这部分很有意义,这让我相信读取权限的同步规则不能正常工作。检查 docs 它应该符合我当前的规则。有什么我想念的吗?

我对我的 React Native 应用程序有相同的要求。它还需要同步 public 数据和私人数据(针对当前登录用户)。

奇怪的是,文档对这件事的帮助不大。

据来自 Ian_Ward 的一位 MongoDB 官方论坛员工的 this post 称,打开 Realm 数据库时不可能有多个分区键。因此,解决方案是打开多个 Realm 数据库(每个分区键一个)。

Ian_Ward: "You would need to open two separate realms by supplying each with a separate partitionKey value. You should be able to open them both at the same time."

例如,在我们的例子中,这意味着:

  • 正在打开第一个数据库以获取 public 可用数据
  • 为用户特定数据打开第二个数据库
const realmPublic = await Realm.open({
    schema: [ContactRealm.schema],
    sync: {
        user, // It can be the instance of the signed in user, or even Realm.Credentials.anonymous()
        partitionValue: 'public',
    },
});

const realmUser = await Realm.open({
    schema: [ContactRealm.schema],
    sync: {
        user, // MUST be the instance of the signed in user 
        partitionValue: `user=${user.id}`,
    },
});