领域:使用 属性 聚合进行查询
Realm: query with property aggregation
我有 2 个对象:Person 和 Transaction。人可以有多个事务(1-many)。现在我想得到所有 sum(transactions.amount) > 0 的人。我怎样才能最有效地做到这一点?
我的模型设置:
class Person: RLMObject {
dynamic var name = ""
dynamic var transactions = RLMArray(objectClassName: Transaction.className())
var balance: Int {
var balance = 0
for transaction in self.transactions {
let transaction = transaction as Transaction;
balance += transaction.amount
}
return balance
}
}
class Transaction: RLMObject {
dynamic var amount = 0
}
并尝试查询:
let debtPersons = Person.objectsWhere("balance < 0")
let creditPersons = Person.objectsWhere("balance >= 0")
关于这种天真的接收方法:
'Invalid column name', reason: 'Column name balance not found in table'
Realm 目前不支持进行聚合查询,因此没有单行程序可以执行您想要的查询。此外,Realm 无法查询未持久化的属性(在本例中为 balance
),因为它们不在数据库中。最好的办法是手动过滤所有 Person
对象,而不是使用本机查询。
我有 2 个对象:Person 和 Transaction。人可以有多个事务(1-many)。现在我想得到所有 sum(transactions.amount) > 0 的人。我怎样才能最有效地做到这一点?
我的模型设置:
class Person: RLMObject {
dynamic var name = ""
dynamic var transactions = RLMArray(objectClassName: Transaction.className())
var balance: Int {
var balance = 0
for transaction in self.transactions {
let transaction = transaction as Transaction;
balance += transaction.amount
}
return balance
}
}
class Transaction: RLMObject {
dynamic var amount = 0
}
并尝试查询:
let debtPersons = Person.objectsWhere("balance < 0")
let creditPersons = Person.objectsWhere("balance >= 0")
关于这种天真的接收方法:
'Invalid column name', reason: 'Column name balance not found in table'
Realm 目前不支持进行聚合查询,因此没有单行程序可以执行您想要的查询。此外,Realm 无法查询未持久化的属性(在本例中为 balance
),因为它们不在数据库中。最好的办法是手动过滤所有 Person
对象,而不是使用本机查询。