【发布时间】:2021-08-22 01:28:19
【问题描述】:
我有一个可编码的 Swift 结构层次结构,我需要将其存储在云中的 MongoDB (Atlas) 中。我确实不需要在本地保存这些结构,并且这个应用程序一旦存储就不需要访问这些数据。 (还有其他应用程序访问它,但这超出了这个问题的范围。)
MongoDB 曾经提供一个名为 Stitch 的解决方案,它确实允许我这样做:我的 iOS 应用程序有一个 codable Swift 结构,iOS 应用程序连接到 MongoDB 的 Atlas 云上的 Stitch 应用程序,我能够插入将结构体放入数据库中的集合中。
使用 Stitch,我可以这样做:
let itemsCollection = mongoServiceClient.db(“myDatabase”).collection(“myCollection”,
withCollectionType: MyStruct.self)
itemsCollection.insertOne(myStruct)
现在 Stitch 显然已弃用并被 Realm 取代,Realm 是 MongoDB 收购并与其 Atlas 云集成的以前的第三方本地持久层。
Realm 与 Stitch 不向后兼容,并且它似乎不再能够将 Swift 结构映射到 MongoDB 后端:它现在可以同步 Realm 对象,即 Realm 定义的抽象基类的 ObjC 桥接子类.将我的应用程序在多个地方使用的几十个结构转换成这样的类太复杂了,特别是因为我这样做的唯一目的是为了将它们上传到后端,因为我不需要任何(毫无疑问非常好) Realm 的核心功能。
(顺便说一句,我发现从结构体到对象的迁移,尤其是在 Objective-C 基础的情况下,非常令人费解,因为它非常违背流程:很明显 Swift 和值类型是 Apple 的未来平台...)
我的问题:有没有一种我可能错过的方法来连接到 Atlas 上的 Realm 应用程序,并将定义为 Swift 结构的文档插入到 Atlas DB 中的集合中?
或者是否有一种相当简单的方法可以将 JSON 转换为 Realm 对象?根据我的阅读,我仍然需要为对象定义一个模式,并且由于我的源结构包含多个嵌入式结构,因此需要为每个结构创建 Object 子类,这是我真正需要避免的。基本上,我围绕 MongoDB 和 Stitch 设计了我的应用程序的这个功能,我还没有准备好突然适应 Realm 的限制而没有附加价值。
最后,失败了,有没有办法将我的结构编码为一些官方 MongoDB API(例如 Realm)可以用于插入的格式?
我已经可以将我的结构编码为 JSON,但这似乎还不够。我看过有关MongoDB Realm Remote Access 的文档,但除了连接到数据库之外,它并没有说明我的用例。
我收到的错误消息表明我需要创建一个Document(又名Dictionary<String, Optional<AnyBSON>>),其中AnyBSON 是一个定义BSON 值类型的枚举。我还没有找到任何关于将任何内容转换为该格式的文档:是否有用于该格式的 API,或者我是否需要将我的结构或 JSON 分解为 AnyBSON 值的层次结构?
【问题讨论】:
-
这个问题很难理解。你问的是 MongoDB 还是 Realm?阿特拉斯是什么?它的一部分还读作“我想使用 Realm,但我不想使用 Realm,因为我不喜欢它的 API”,这……令人困惑,我不确定你在寻找什么
-
缝合?阿特拉斯?它们是什么,它们与在 Swift 中开发什么有什么关系?
-
@Alexander 问题显然是针对那些了解 MongoDB 和 Realm 的人。如果您仔细阅读,我看不出我的问题有多么令人困惑:这是最后一段。
-
我认为这可能会限制您获得的读者/回答者的数量,因为只知道 MongoDB 或只知道 Realm 的人将无法提供帮助,因为他们不了解另一个。我认为,如果您以更详细的方式表达您的问题,从而减少潜在回答者需要知道的背景知识,您将获得更好的成功。
-
我很感激,但这是关于 Swift SDK for Realm 的一个非常具体的问题。我知道组合的用户不多,但就是这样。
标签: swift mongodb realm mongodb-stitch