MongoDB Realm 安卓开发如何读取其他用户创建的分区数据?
MongoDB Realm跨用户查询分区数据返回为空问题排查
- 原因1:未等待初始同步完成就执行查询
你调用Realm.getInstance(config)后会立即返回本地Realm实例,此时服务端数据还未完成异步同步,首次打开其他用户分区时本地没有缓存数据,所以查询结果必然为0。
解决方案:添加初始同步完成监听,同步完成后再执行查询,示例代码如下:SyncConfiguration config = new SyncConfiguration.Builder( mainApp.currentUser(), partition) .waitForInitialRemoteData() // 等待首次同步完成再返回实例 .build(); // 注意waitForInitialRemoteData会阻塞当前线程,建议放在子线程执行 Realm.getInstanceAsync(config, new Realm.Callback() { @Override public void onSuccess(Realm realm) { Log.d(TAG, "onCreate: cards found- " + realm.where(Card.class).findAll().size()); } }); - 原因2:权限配置未实际生效
即使你设置了全局读写权限,也要确认两处配置:- 分区同步的权限规则是否覆盖了
Card=前缀的所有分区,有没有针对特定分区的权限限制优先级高于全局配置 - 集合的文档级权限有没有额外过滤规则,比如配置了
owner_id == user.id这类条件,会导致其他用户无法查询到不属于自己的文档
- 分区同步的权限规则是否覆盖了
- 原因3:客户端Schema与服务端不匹配
如果当前用户端的Card类字段定义、字段类型、@RealmField注解配置和服务端Schema不一致,同步过程中会自动过滤不匹配的文档,导致本地查询不到数据。可以对比两个用户端的Card类定义,以及和Atlas后台配置的集合Schema是否完全一致。 - 原因4:分区值匹配错误
确认目标分区下的所有Card文档的_partition字段值完全等于你代码中写的Card=611d7n582w36796ce34af106,没有多余空格、大小写错误或者字符拼写错误。
内容的提问来源于stack exchange,提问作者Ron Petrosian
相关产品推荐
相关产品推荐

