我有两个对象:作者和书。
@RealmClass
class Author {
@PrimaryKey
val id: String?
val books: RealmList<Book> = RealmList()
}
@RealmClass
class Book {
@PrimaryKey
val id: String?
val countPages: Long
val genre: String
}
我在领域有数据,如下:
{ "id": "author1", "books": [ { "id": "book1", "countPages": 100, "genre": "fantasy" }, { "id": "book2", "countPages": 150, "genre": "non-fiction" } ] }
我想找到有书的作者,这些书有特定的类型和特定的页面数。如果我写这样的话:
realmQuery.where().equalsTo("books.countPages", 100).equalsTo("books.genre", "non-fiction").find()
我会找一位id = author1的作者。但事实并非如此,我应该得到空名单。
如何编写查询来实现此目的?
答案 0 :(得分:1)
链接查询会转换为has at least one of ___ where X is true
,所以
.equalsTo("books.countPages", 100).equalsTo("books.genre", "non-fiction")
表示&#34;作者至少拥有一本具有countPages 100的书,并且至少有一本具有类型非小说的书#34; - 这是真的!但这不是你想要的。
有两种方法可以解决这个问题:
1。)查询现有结果集以获得更小的&#34;结果:
realmQuery.where()
.equalTo("books.countPages", 100)
.findAll()
.equalTo("books.genre", "non-fiction")
.findAll()
2.)在Books上执行查询,并通过链接对象反向关系访问作者
@RealmClass
class Book {
@PrimaryKey
val id: String?
val countPages: Long
val genre: String
@LinkingObjects("books")
val authors: RealmResults<Author>? = null
}
和
val books = realm.where<Book>().equalTo("countPages", 100).equalTo("genre", "non-fiction").findAll();
// these books have `authors` field that contains the author