上下文:
对于“至少在内容组中的一个”中,在文档中找到了'in'运算符:
这允许您测试对象是否匹配值数组中的任何值。
但是第二,没有办法执行这种查询。我在其他帖子中搜索了解决方案,但有些人似乎说目前不支持该解决方案。在iOS中,它似乎可以在NSPredicate中使用,但在Java中不可用。
这是我的代码:
fun <E: RealmObject> RealmQuery<E>.groupsAllowed(): RealmQuery<E>{
val userGroupsIds = realm.queryUserConnected()?.findFirst()?.groups?.toGroupIds()
if(userGroupsIds == null || userGroupsIds.isEmpty()){
isEmpty("groupsAllOf")
isEmpty("groupsOneOf")
}else{
beginGroup()
beginGroup()
isEmpty("groupsOneOf")
or()
`in`("groupsOneOf.id", userGroupsIds.toTypedArray())
endGroup()
//beginGroup()
//isEmpty("groupsAllOf")
//or()
//TODO
//endGroup()
endGroup()
}
return this
}
当前,当我获得groupsAllOf的RealmResults时,我正在执行后置过滤器:
fun <E: RealmObject> E.groupsAllowed(userGroupIds: List<String>): E?{
val groupsAllOf: RealmList<Group>? = when(this){
is Sheet -> groupsAllOf
is Category -> groupsAllOf
else -> null
}
if(groupsAllOf == null || groupsAllOf.isEmpty()){
return this
}else{
return if(userGroupIds.containsAll(groupsAllOf.toGroupIds())) this else null
}
}
fun <E: RealmObject> RealmResults<E>.groupsAllowed(): List<E>{
val userGroupIds = realm.queryUserConnected().findFirst()?.groups?.toGroupIds()?: emptyList()
val listAllowed = arrayListOf<E>()
this.forEach { it.groupsAllowed(userGroupIds)?.let { contentAllowed -> listAllowed.add(contentAllowed) } }
return listAllowed
}
fun RealmList<Group>.toGroupIds(): List<String> = arrayListOf<String>().apply { this@toGroupIds.forEach { group -> this.add(group.id) } }
但这很烦人,因为当我获得RealmResults时,我不得不忘记调用此函数:/
我们将不胜感激。