小编Bri*_*ogg的帖子

从 Firestore 中的数组中删除对象

我刚刚开始接触 Firebase,到目前为止确实在深入研究,但在使用云函数从集合中的数组中删除项目时遇到了一些问题。在我正在使用的应用程序中,用户在用户集合中有一个文档,其中包含不适合身份验证模型的特定于用户的数据。数据如下:

用户集合结构的屏幕截图。

(这是一个与健身相关的应用程序,因此该数组被称为“锻炼”)

用户可以创建锻炼,创建锻炼后,云函数会监视新锻炼,将新创建的锻炼的 ID 添加到用户文档中,并使用 arrayUnion 将其附加到锻炼数组中:

exports.addWorkoutToAuthorsListOfWorkouts = functions.firestore
    .document('workouts/{workoutId}')
    .onCreate((snap, context) => {
      const id = context.params.workoutId
      const name = snap.data().title
      const uid = snap.data().author

      const workout_reference = { id: id, name: name, uid: uid }
      const workoutsRef = admin.firestore().collection("users").doc(uid)

      return workoutsRef.update({
        workouts: admin.firestore.FieldValue.arrayUnion(workout_reference)
      })
    })
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我希望用户能够删除锻炼,并且我没有将字符串添加到锻炼数组中,而是添加一个如下所示的对象:

{ id: "1214", name: "My workout", uid: "123asd" }
Run Code Online (Sandbox Code Playgroud)

现在,对于这个确切的用例,我可以删除 ReactJS 应用程序中的数组,然后进行更新,但我将添加用户“喜欢”其他用户的锻炼的功能,这将导致提及将锻炼添加到其个人用户文档中的“锻炼”中。因此,如果我作为锻炼的创建者删除我的锻炼,我需要能够从拥有它的任何用户的锻炼数组中删除它。使用 arrayRemove 不起作用,因为(我假设)我无法传递要删除的对象。

执行此操作的最佳实践方法是什么?我做了这样的尝试:

exports.removeWorkoutFromAuthorsListOfWorkouts = functions.firestore
  .document('workouts/{workoutId}')
  .onDelete((snap, context) => {

    const id =  context.params.workoutId
    const uid …
Run Code Online (Sandbox Code Playgroud)

arrays firebase google-cloud-functions google-cloud-firestore

6
推荐指数
0
解决办法
3065
查看次数

Firebase和Firestore是否可以进行多租户设置?

我正在考虑使用Firebase和Firestore创建多租户应用程序。租户的数量将很少(最初约为6个),最终用户将不会在应用程序上创建自己的实例,而是由管理员严格控制的。

我的理想情况是只有一个应用程序,可以将多个域附加到该应用程序,并将请求路由到特定数据库以实现它们。

我有一些担忧:

我已经阅读了文档,可以为每个应用程序创建多个数据库,但是在管理面板中看不到这些选项,因此我不确定文档当前是否不正确(或者是否引用了Realtime DB)。

我不希望将注册的用户注册到所有租户,并且考虑到Firebase身份验证似乎可以正常工作的方式,我看不到可以指定用户注册到哪个域的任何方法。我曾想过要在一个集合中进行管理,该集合可跟踪用户所属的域,并对其进行伪造,以使其看起来像是使用户处于孤立状态,但是如果用户在“两个”租户中注册,并想要更改其登录名,凭据,这会在整个网络上对其进行更改,并且可能会造成混淆。

因此,听起来这将无法像我所希望的那样干净,这将使我指向选项2:

拥有一个前端应用程序,该应用程序引用了它可以连接到的所有Firebase应用程序,并与独立应用程序的后端联系,以保持数据和用户身份验证的分离。这样可以解决孤立的用户问题,但是随后我将在后端维护几个不同的应用程序,而制作此产品的新版本的全部目的是摆脱维护多个,相似但略有不同的代码库的麻烦。解决问题的一种方法将相同的代码存储库部署到firebase上的不同应用程序:CLI是否允许我每次选择我的部署目标?

我认为选项3是让无头React应用程序联系节点服务器或其他东西,但是那样我会失去所有出色的Firebase优势,而我真的在挖掘Firebase。

这是一个可解决的问题吗?还是我想将方形钉塞入圆孔?

谢谢!

firebase google-cloud-firestore

6
推荐指数
1
解决办法
555
查看次数