【问题标题】:Realm get certain properties of matching query than all properties?领域获得匹配查询的某些属性而不是所有属性?
【发布时间】:2020-03-11 08:34:42
【问题描述】:

我有一个巨大的对象类,其属性 description 为字符串类型,长度约为 20000 个字符。

查询返回的对象如下所示:

obj = {
    id: a9cd46cf-8e9a-4a52-a762-a6ada55d4dd3 UUID
    title: 50 char String
    description: 20000+ char String  
    section: 10 char String
}

当使用领域查询 obj 时,会在内存上产生一个非常大的列表,这对性能不利。所以查询看起来像这样:

realm.where<TextBlob>().equalTo("section", "A_SECTION").findAll()

是否可以查询RealmObject 以仅返回给定数据结构的idtitle

所需的对象结构:

obj = {
    id: a9cd46cf-8e9a-4a52-a762-a6ada55d4dd3 UUID
    title: 50 char String
}

在某些 ORM 中存在 values 过滤器; Realm 是否存在类似的东西?

【问题讨论】:

  • when querying for the obj with realm yields a very huge list on memory which is not good for performance.托管的Realm对象是RealmProxy对象,所以description只有在调用myClass.description(myClass.getDescription())时才会真正复制到内存中

标签: android realm realm-mobile-platform realm-list


【解决方案1】:

使用map 将属性映射到地图集合。例如,将结果映射到 ArrayListHashMaps

val results: ArrayList<HashMap<String, String>> = ArrayList()

realm.where<TextBlob>().equalTo("section", "A_SECTION").findAll().map {
    results.add(hashMapOf("id" to it.id, "title" to it.title ))
}

【讨论】:

  • 你能解释一下这有什么帮助吗?您仍在调用 realm.where().equalTo("section", "A_SECTION").findAll() 如果例如该查询的结果正在耗尽内存并导致 OOM 异常,则此方法无济于事对吗?
  • @kingston 因为 Realm 不提供任何过滤器,因为值映射可以帮助获得所需的结构。缺点是不能和RealmRecyclerAdapter一起使用。
猜你喜欢
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多