【问题标题】:Realm: query with property aggregation领域:使用属性聚合进行查询
【发布时间】:2015-03-10 16:46:43
【问题描述】:

我有 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'

【问题讨论】:

    标签: ios cocoa-touch swift realm


    【解决方案1】:

    Realm 目前不支持进行聚合查询,因此没有单行程序可以执行您想要的查询。此外,Realm 无法查询未持久化的属性(在这种情况下,就像 balance 一样),因为它们不在数据库中。最好的办法是手动过滤所有 Person 对象,而不是使用本机查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      相关资源
      最近更新 更多