【问题标题】:Correct way to store an array of custom objects in Cloud Firestore?在 Cloud Firestore 中存储一组自定义对象的正确方法?
【发布时间】:2019-06-13 02:21:00
【问题描述】:

我想在firebase中存储一个自定义对象Event,一个Event可以有几个StopOffUser,我将它们保存在Event对象中作为[StopOff][User]

但是,当我尝试保存到 Firebase 时,我发现这些类型不是 Firebase 支持的基本可保存类型。

这对于单个对象来说没问题,因为我可以使用 toAnyObject 方法将它们映射到基本键和值,但是对于数组我看不到为数组中的每个项目实现这一点的方法吗?

当这些自定义模型数组中还有更多自定义对象创建树时,情况会变得更糟

这是我遇到问题的方法

    func toAnyObject() -> Any {
    return [
        "name": name,
        "users": users,
        "startPoint": startPoint.toAnyObject(),
        "endPoint": endPoint.toAnyObject(),
        "stopOffs": stopOffs
    ]
}

我确信我的方法一定是不正确的,因为我习惯了传统的 SQL 后端,但我希望我的方法得到纠正

【问题讨论】:

  • 你使用的是firestore还是实时数据库?
  • firestore 我相信
  • 我认为您的做法是错误的,并且会将自己编码到一个角落。 Firestore 存储字符串、布尔值、数字、日期、null 以及嵌套数组和对象,但请注意,对于对象:Swift 不支持此功能。请改用值类型。。所以。不要存储对象。仅存储基本数据类型。您应该真正研究基于文档的 NoSQL,因为它引用了 SQL 的飞跃,并且在处理数据时需要不同的思维过程。例如,您可以考虑将其字段作为属性的“文档”和对象。
  • 感谢您对此的见解,在正确的方法中是否有任何好的指南/您能否建议更适合该模型的实施?当模型必须包含其他模型的关系时,我正在努力寻找有关使用多个基本类型的教程
  • Todd 整理了一个great series on Firestore,它在#3#4 中深入介绍了数据库架构。

标签: ios swift firebase google-cloud-firestore


【解决方案1】:

看来使用

"users": users.map { $0.toAnyObject() }

在我的父 toAnyObject 函数中,允许将数组转换为预期的对象并存储在云存储中,希望这是最好的解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多