【问题标题】:Move from firebase to firestore从 Firebase 移动到 Firestore
【发布时间】:2018-04-22 06:59:53
【问题描述】:

我正在开发一个包含 USER 和 EVENT 的应用。 每个事件有几个用户,每个用户有几个事件。

在 Firebase 中,事件和用户都是“详细信息”键(请参阅下面的 json),这些详细信息是重复的,因此所有事件用户都有事件的详细信息,所以在我的主要活动中,我有一个 recyclerview 显示那些事件很容易(对于用户在事件活动中列出的方式相同。 为了同步所有这些副本,我使用了 firebase 函数。

现在我想移动 ti firestore,但我不确定应该怎么做。

据我所知,我可以在事件文档中列出用户 ID,然后使用 user.id = current_user_id 查询所有事件。 问题是我每个用户有更多字段(费用,我想添加更多)所以我也有每个用户的子集合,或者有更复杂的列表。

我可以根据事件的子集合 id 查询事件吗?

我将不胜感激。

当前的Json:

    {
      "events" : {
        "-L7v0K***" : {
          "average" : 110,
          "details" : {
            "date" : {
              "date" : 1520354933426
            },
            "location" : "Tel Aviv",
            "name" : "test"
          },
          "items" : {},
          "require_transactions" : [ {}],
          "totalexpenses" : 220,
          "users" : {
            "ARKuwgrDHcNnXHoPlCgIBXOObjD3" : {
              "details" : {
                "uid" : "ARKuw***",
                "userEmail" : "r***g@walla.com",
                "username" : "R** G***"
              },
              "expenses" : 20
            },
            "pDFtk***" : {}
        },
        "-L84Gg***" : {}
        }
      },
      "users" : {
        "ARKuw***" : {
          "details" : {
            "uid" : "ARKuwg***",
            "userEmail" : "r***g@walla.com",
            "username" : "R** G***"
          },
          "events" : {
            "-L7v0Kx***" : {
              "date" : {
                "date" : 1520354933426
              },
              "location" : "Tel Aviv",
              "name" : "test"
            },
            "-L97_3***" : { }
        },
        "TAJK6***" : {}
        }
      }
    }

【问题讨论】:

    标签: android firebase firebase-realtime-database google-cloud-firestore


    【解决方案1】:

    Firebase 非常接近 firestore,我还使用 firebase 实时启动一切,然后移至 firestore,以进行更复杂的查询。

    所以,据我了解,您将有两个主要集合,您可以通过以下方式创建它们:

    firebase.firestore().collection('users')
    firebase.firestore().collection('events')
    

    在用户内部,您将有一个名为 events 的子集合来触发特定用户拥有的所有事件,因此它将是这样的:

    firebase.firestore().collection('users').doc(userId).collection('events')
    

    要进行查询,例如,要获取特定用户正在参加的所有活动,您可以键入:

    firebase.firestore().collection('users').doc(userId).collection('events').get()
    

    (在这里你可以做一些过滤,比如限制、'where'、byId... by 'field equals to'...所有这些都是文档)

    这将返回他参加的集合中的所有 eventsId。

    记住要按规模思考以降低成本。 如果你能解释更多你需要的任务,我可以在一个解决方案中工作。 firestore 的文档非常简单。

    【讨论】:

    • 从你所说的,在 users/{id}/events 我将只保存事件 ID 的文档?或者复制事件集合?是否可以保留参考,以免重复?我目前所做的是在 events/{eventId} 我有一些用户的子集合以获取一些详细信息,还有一张只包含用户 ID 的地图。然后我可以执行以下查询: mFirestoreDatabase.collection(EVENTS).whereEqualTo(USERS + "." + mUser.getUid(), true);
    猜你喜欢
    • 2023-02-10
    • 2018-03-16
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2022-09-28
    • 2021-11-05
    • 2019-04-17
    • 2022-08-17
    相关资源
    最近更新 更多