使用列表中元素的 属性 对领域结果进行排序
Sort realm results using a property of an element in a list
我有两个领域 classes... 第一个 class Patient
包含一个或多个第二个 class Record
,作为以下:
class Patient: Object, ObjectKeyIdentifiable {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var records: List<Record>
}
class Record: EmbeddedObject {
@Persisted var date = Date()
@Persisted(originProperty: "records") var patient: LinkingObjects<Patient>
}
我想按最后 record
的 date
对 patients
进行排序,如下所示:
patients = realm.objects(Patient.self).sorted(byKeyPath: "records.last.date", ascending: false)
realm 和 swift 这可能吗?
谢谢
objective 是根据患者记录列表中记录的最新日期对患者进行排序。
这是可以做到的,有几种方法。一种选择是,在填充患者记录时,单独 属性 记录最新日期。
患者对象看起来像这样
class Patient: Object, ObjectKeyIdentifiable {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted private var records: List<Record>
@Persisted var lastRecord: Record!
func addRecord(withRecod: Record) {
self.records.append(withRecord)
let recordArray = Array(self.records)
if withRecod != nil {
let sortedRecords = recordArray.sorted { [=10=].date < .date }
let lastRecord = sortedRecords.last!
let rec = Record(value: lastRecord)
self.lastRecord = rec
}
}
}
我们添加了一个函数来填充记录列表并将该列表设为私有,因此您不得不使用 addRecord
函数来填充 属性。
需要数组,因为 Realm 不会在内存中排序 - 因此,如果对象尚未持久化,则无法对记录进行排序,因此可以利用数组来完成该任务。
最后,数组按日期排序,然后我们复制最后一条记录以存储在 lastRecord 属性 中。嵌入式对象永远不会被持久化 'on their own' 它们不能像其他对象一样被引用,所以一个副本就可以了。
那么排序就变得简单了
let patients = realm.objects(Patient.self).sorted(byKeyPath: "lastRecord.date")
记住 updateRecord
和 deleteRecord
函数可能是为了 re-calculate lastRecord
发生这些变化。
我有两个领域 classes... 第一个 class Patient
包含一个或多个第二个 class Record
,作为以下:
class Patient: Object, ObjectKeyIdentifiable {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var records: List<Record>
}
class Record: EmbeddedObject {
@Persisted var date = Date()
@Persisted(originProperty: "records") var patient: LinkingObjects<Patient>
}
我想按最后 record
的 date
对 patients
进行排序,如下所示:
patients = realm.objects(Patient.self).sorted(byKeyPath: "records.last.date", ascending: false)
realm 和 swift 这可能吗?
谢谢
objective 是根据患者记录列表中记录的最新日期对患者进行排序。
这是可以做到的,有几种方法。一种选择是,在填充患者记录时,单独 属性 记录最新日期。
患者对象看起来像这样
class Patient: Object, ObjectKeyIdentifiable {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted private var records: List<Record>
@Persisted var lastRecord: Record!
func addRecord(withRecod: Record) {
self.records.append(withRecord)
let recordArray = Array(self.records)
if withRecod != nil {
let sortedRecords = recordArray.sorted { [=10=].date < .date }
let lastRecord = sortedRecords.last!
let rec = Record(value: lastRecord)
self.lastRecord = rec
}
}
}
我们添加了一个函数来填充记录列表并将该列表设为私有,因此您不得不使用 addRecord
函数来填充 属性。
需要数组,因为 Realm 不会在内存中排序 - 因此,如果对象尚未持久化,则无法对记录进行排序,因此可以利用数组来完成该任务。
最后,数组按日期排序,然后我们复制最后一条记录以存储在 lastRecord 属性 中。嵌入式对象永远不会被持久化 'on their own' 它们不能像其他对象一样被引用,所以一个副本就可以了。
那么排序就变得简单了
let patients = realm.objects(Patient.self).sorted(byKeyPath: "lastRecord.date")
记住 updateRecord
和 deleteRecord
函数可能是为了 re-calculate lastRecord
发生这些变化。