2015-03-10 2 views
1

У меня есть 2 объекта: Person and Transaction. У человека может быть несколько транзакций (1-много). Теперь я хочу получить всех людей, у которых есть сумма (transaction.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' 

ответ

2

Realm в настоящее время не поддерживает делать агрегатные запросы, так для выполнения требуемого запроса нет однострочного интерфейса. Кроме того, Realm не может запрашивать неустановленные свойства (поскольку в этом случае balance), поскольку они не находятся в базе данных. Лучше всего вручную фильтровать все объекты Person вместо использования собственного запроса.