【发布时间】:2016-11-07 14:09:29
【问题描述】:
我有一个“importData”函数,它从 API 中获取一堆 JSON 并将其填充到领域数据库中。该json的一部分看起来像:
files: [
300,
19,
102
]
这些数字与我在获取这些之前已经处理/导入的 JSON 的顺序部分相关,基本上只是属于该组的文件列表。
这在我的领域对象中是这样建模的:
class SomeGroup : Object {
let files = List<File>()
}
我需要保留这些 id 的排序顺序,以便当我链接文件关系时,文件的顺序正确。
为了获取我需要链接的文件模型,我运行如下查询:
let thefiles = realm.objects(File.self).filter("id IN %@", fileIds)
问题是这会以不同的顺序返回它们,.sorted 方法只能按模型属性排序(从我可以从文档中得知)。
我考虑循环遍历结果并将它们从 Result<File> 类型转换为基本 Array<File> 或 List<File> 类型,以便我可以自己对它们进行排序,但是这会丢失领域指针信息,因此我希望领域无法创建链接。
唯一的另一件事是查询每个文件并将其单独附加到组文件关系中,但是如果我这样做,查询计数将会飙升。
有人可以告诉我通过自定义函数/回调订购 Result<File> 类型的最佳方法,以便它与我的 json 中的 id 数组匹配吗?
【问题讨论】:
-
如果文件添加到集合的顺序与您的模型和工作流程相关,那么您应该向模型添加一个“顺序”键(
File对象)。您在迭代 JSON 输入并创建File对象时设置它,稍后在查询中使用它以获得正确的顺序。 -
@bogdanf 这是一个多对多的关系。要设置顺序键,我必须在关系上放置顺序(类似于 mysql 中数据透视表上的额外列)。
-
是的,正确,为什么不创建一个“关系”对象,其中包含指向组和文件的链接以及文件的顺序?
-
@bogdanf 当然,我可以创建一个枢轴对象,但我正在尝试找出是否有更优雅的解决方案,因为领域列表保持其顺序,唯一导致问题的是订购插入列表,其他所有内容都已支持。找到一个可行的解决方案相对简单,我发布问题的原因是确定是否有一种方法可以在不重新建模我的数据的情况下做到这一点