如何将 MongoDB 领域应用程序用户添加到 Atlas 集合?

Posted

技术标签:

【中文标题】如何将 MongoDB 领域应用程序用户添加到 Atlas 集合?【英文标题】:How do I add MongoDB Realm App Users to Atlas collection? 【发布时间】:2021-12-08 12:51:34 【问题描述】:

我正在开发一个 SwiftUI 应用程序,该应用程序连接到由服务器填充和管理的 MongoDB Atlas 数据库(托管)。我已经为我的 SwiftUI 应用程序创建了一个领域,并且可以成功地创建一个用户并登录,但是我无法将创建的用户(在领域 UI 中的应用程序用户中找到)连接到我的数据库用户中的用户文档收藏。这样做的正确方法是什么?我是否需要在集合中为任何新应用用户手动创建用户?

【问题讨论】:

正确的方法是使用 SDK 读取和写入数据 - 我的意思是,这就是它的用途,对吧?入门指南Read & Write Data 中有很好的示例。你看过那个吗?哦 - 您不需要手动创建用户。我们的应用程序有一个用户注册,应用程序在其中为用户创建用户帐户。这一切都是通过Authenticate 完成的 另一件事;如果您没有适当的规则(权限),您的任何应用程序用户都可以访问任何数据,因此不应该出现“将用户连接到用户文档”的情况。换句话说,如果用户进行身份验证,然后应用程序连接到您的领域,则用户可以读取该领域内的任何对象(使用给定的 partitionKey)。浏览Task Tracker Tutorial,它准确地展示了如何读取和写入同步数据。 我已经阅读了所有这些教程 - 请在下面查看我对 Oblivion 答案的评论。 我读了那条评论,它和这个问题真的很不一样;这个问题听起来像是在问用户,但实际上你是在问其他用户数据,这是完全不同的两件事。需要注意的是,虽然 Realm 有一个 SDK,它为编写应用程序提供了非常好的平台,但存储在 MongoDB 中的 数据 根本不是专门的“领域数据”——它是 MongoDB Atlas 数据,可以通过以下方式访问包括 REST 调用在内的多种方式。例如如果您的 Realm 数据已同步,则该同步数据位于 MongoDB Atlas 中。 我明白这一点,但我的问题的前提是,是否有一种本地方法可以让所有 Realm 用户同步到数据库中的集合,而不是仅仅被孤立到他们自己的领域。 【参考方案1】:

@jostell13 - REALM 用户不是 ATLAS 数据库用户。

但是,这并不意味着 REALM 用户需要他们自己的集合来使用任何新应用。

当您创建领域应用程序时,您需要指定与之关联的 ATLAS 集群。有多种方法可以做到这一点 - 我将介绍两种。 SDK、函数

https://docs.mongodb.com/realm/sdk/swift/examples/read-and-write-data/#read---write-data---swift-sdk

https://docs.mongodb.com/realm/sdk/swift/data-types/collections/#collections-are-live

SDK 提供 LIVE 集合,这是一项非常棒的功能。如果 LIVE 集合以及实时通知、实时更新对象、延迟加载对象等不是必需的,您也可以考虑使用函数。

(感谢 @Jay 提出 SDK > Functions)

https://docs.mongodb.com/realm/functions/

const plants = context.services.get("mongodb-atlas").db("example").collection("plants");
const plant = await plants.findOne();
return JSON.stringify(plant);

可以从 REALM 应用程序调用函数,或者您甚至可以创建 HTTPS 端点之类的东西,这样您就可以使用简单的 HTTP 请求与函数进行交互。 https://docs.mongodb.com/realm/endpoints/

关于函数最好的部分是 - 依赖!您几乎可以使用任何 npm 模块作为函数的依赖项! (有一些限制,但这个功能集只会在未来改进) https://docs.mongodb.com/realm/functions/add-external-dependencies/

【讨论】:

虽然这是一个答案,但我觉得它有点不完整。 Realm 提供的 SDK 为读取和写入数据提供了非常灵活的接口。虽然有函数的用例,但如果不使用 SDK,您会放弃实时通知、实时更新对象、延迟加载对象等内容。我建议您将 SDK 作为您的主要选择和实现功能对于边缘情况。只是需要考虑的事情。 @Jay 很好 - 我将修改答案以包含 SDK 谢谢大家 - 我认为我的问题不是很清楚。我知道领域用户不是阿特拉斯数据库用户,但我想做的是涉及跨领域同步用户数据并进入阿特拉斯数据库。例如,将从我们的 node.js 服务器访问包含名称、位置等的用户配置文件。我有运行用户帐户创建和登录的 Swift 应用程序,但我需要从领域外部访问该数据。 有趣 - 我想我有一些可以提供帮助的东西 - 但现在忙于开会 - 我一会儿再回过头来。 确认一下,您想要的是 - 您想要拥有一个领域应用程序,其中包含用户和用户自定义数据。并且您希望能够从领域应用程序之外访问部分/部分数据?像从端点一样?【参考方案2】:

虽然我从这里的回复中获得了很多有用的信息,但没有提到我找到的解决方案。

这样做的正确方法仍然是通过触发函数将数据从 Realm 手动复制到数据库。

【讨论】:

以上是关于如何将 MongoDB 领域应用程序用户添加到 Atlas 集合?的主要内容,如果未能解决你的问题,请参考以下文章

如何在mongodb中将字段添加到用户的帐户

即使原始模型中未指定新值,如何将新值添加到现有 MongoDB 数据库中

如何在 NodeJS 中引用我的 MongoDB 数据,然后将其添加到 Discord.JS 消息中?

如何使用 React 从 MongoDB 数组中正确删除用户?

如何给mongodb管理员权限

如何对MongoDB 3.2.7进行用户权限管理配置