【问题标题】:How to connect to MongoDB from iOS (Swift)如何从 iOS (Swift) 连接到 MongoDB
【发布时间】:2020-06-14 16:51:34
【问题描述】:

我使用 RealmSwift 开发了一个 iOS 应用程序。 到目前为止,这工作正常。 现在,随着我越来越接近发布到 App Store,我想设置一些云配置以连接到云数据库,但我完全糊涂了。

几周前,我将 Realm Cloud 视为一种选择。现在我只看到 MongoDB Realm - 或类似的东西。我挖了一下,发现有三个组件:Realm DB、Realm Sync 和 Mongo DB Atlas。

如果我的理解是正确的,我必须创建一个 Atlas 集群,我的 Realm 数据库将托管在该集群上,并且我将能够连接和同步到该集群。我说的对吗?

我的主要问题是我不知道如何将它连接到我现有的代码。我不想要用户身份验证或来自 MongoDB 的任何东西,我有我自己的,我基本上只有一个数据库,我想同步和连接到它。所以,目前在我常用的代码中:

let realm = try! Realm()
try! realm.write {
   ...
}

如何更新它以使用 Atlas Cloud 中的 MongoDB?我浏览了他们的“教程”,但我仍然太困惑了。

我看到了一个Realm(configuration: Realm.Configuration) init 函数,但如果我应该使用那个函数,我应该如何获得一个 Realm.Configuration 对象?

另外,分区键是什么意思?

非常感谢。

【问题讨论】:

    标签: ios swift mongodb realm


    【解决方案1】:

    你的困惑是有道理的。文档和教程仍在进行中,并且有点脱节。我认为随着时间的推移会有所改善。

    SO 不是一个完整教程的好地方,但这里有一个非常高级的概述。

    教程链接 - iOS Swift Tutorial

    完成 Cocoapods 安装

    1) 您将在 MongoDB 控制台中创建集群

    2) 在该集群中,您将创建一个领域“应用程序”

    3) 在您要设置的领域“应用程序”中:

    • 同步(开发模式)

    • 用户->提供者->电子邮件/密码验证

    您的应用将有一个 AppId,可在左侧的 Atlas 控制台中找到,紧邻应用名称(这是一个文档按钮,您可以单击以进行复制)。

    然后,在您的 XCode Realm 项目中,您将使用 cocoapods 进行设置以安装 RealmSwift。

    现在回答你的问题:

    如何将它连接到我现有的代码。

    添加一个结构体,它是您 Atlas Realm 项目的连接字符串

    导入 RealmSwift

    struct Constants {
        // Set this to your Realm App ID found in the Realm UI.
        static let REALM_APP_ID = "your app id"
    }
    

    那么,当你想要认证时,你会这样做

    let app = RealmApp(id: Constants.REALM_APP_ID)
    app.login(withCredential: AppCredentials(username: username, password: password)) { user, error in
    

    一旦你通过了身份验证,就可以使用这个来访问领域

    guard let user = app.currentUser() else {
       fatalError("Must be logged in to access this view")
    }
    
    let realm = try! Realm(configuration: user.configuration(partitionValue: user.identity!))
    

    【讨论】:

    • 谢谢!我必须设置电子邮件/密码身份验证吗?我在自己的数据库表中处理用户,不想使用 MongoDB 提供的方法。我可以跳过这个,并使用应用程序的匿名登录吗?还是使用电子邮件/密码创建一个用户更好,这将是一个应用程序用户名/密码,每次都用于获取应用程序实例?
    • 或者,我看到也有一种方法可以拥有 APIkey,我可以在我的应用程序中使用它来连接吗?也许像 app.login(withApiKey: ???) 第一次打开应用程序时,它会在 MongoDB 中创建数据模型吗?或者我应该以某种方式从源代码/default.realm 文件中导入?我不想手动创建所有表,因为它们已经在代码中创建了。
    • @zdtorok 好问题。我鼓励您利用 MongoDB 提供的身份验证,因为它是安全的,并且可以让您更严格地控​​制用户注册等。但是,是的,您可以使用匿名身份验证。我不鼓励使用单个电子邮件/密码验证。在阅读入门指南时,您可以预先创建架构。我建议跳过该部分。在控制台中设置应用程序时,左侧的同步部分,然后选择右侧的“Define your Schema as you go”选项卡 - 这将启用开发人员模式,该模式将从应用程序创建架构。
    • @half_stack 我们编写了一个小的数据传输应用程序,它读取现有领域数据,使用正确的分区更新它们并将它们写出。还有很多其他方法,但我们的结构相当简单,只有几个关系。
    • @half_stack 好吧,有 Realm (v5.x),然后是 MongoDB Realm (10.x),所以没有特定的“RealmSwift”。请记住,MongoDB Realm 是 BETA,目前仍是 Beta 版(IMO),还有许多服务器级别的问题需要解决。我现在不建议将其用于生产甚至预生产。如果您想尝试一下,现在是熟悉 SDK 和服务器功能的好时机。答案是肯定的,我用一个指向它的配置打开了我现有的本地领域,然后从中创建了 MongoDB 领域对象以进行同步。
    【解决方案2】:

    除了 iOS 应用程序中的嵌入式数据库之外,我从未将 Realm 用作其他任何东西。如果你需要在服务器端存储一些东西,你应该实现一个 API 来写入你的 MongoDB(或你使用的任何数据库)。将 iOS 应用程序直接连接到服务器端数据库对我来说似乎是一种反模式。

    【讨论】:

    • Realm Sync 不是在中间吗?我的理解是,使用 Realm 我不必实现自己的服务器端 API 或任何东西。编写代码,使用 Realm Cloud(或者现在的 MongoDB/Atlas Cloud?),配置它,然后它将数据库存储在云中。
    【解决方案3】:

    Realm Sync 根据需要连接到 Atlas 部署以同步数据。我的理解是您不需要直接在代码中连接到 Atlas。

    Documentation 提供了一些信息,下面几页是示例代码。

    【讨论】:

    猜你喜欢
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    相关资源
    最近更新 更多