将文档的文档 ID 添加到其自己的 Firestore 文档 - Swift 4

2024-06-23

如何将我刚刚添加到 firestore 数据库的文档的文档 ID 添加到该文档?

我想这样做,以便当用户检索“乘车”对象并选择预订它时,我可以知道他们预订了哪些特定乘车。

我面临的问题是,在创建文档 ID 之前,您无法获取文档 ID,因此将其添加到所述文档的唯一方法是创建一个文档,读取其 ID,然后编辑该文档以添加身份证件。从规模上看,这将创建两倍于所需数量的服务器调用。

有没有标准的方法来做到这一点?或者一个简单的解决方案来了解用户预订的“行程”并在数据库中进行相应的编辑?

struct Ride {
    var availableSeats: Int
    var carType: String
    var dateCreated: Timestamp
    var ID: String // How do I implement this?
}


func createRide(ride: Ride, completion: @escaping(_ rideID: String?, _ error: Error?) -> Void) {
    // Firebase setup
    settings.areTimestampsInSnapshotsEnabled = true
    db.settings = settings

    // Add a new document with a generated ID
    var ref: DocumentReference? = nil
    ref = db.collection("rides").addDocument(data: [
        "availableSeats": ride.availableSeats,
        "carType": ride.carType,
        "dateCreated": ride.dateCreated,
        "ID": ride.ID,
    ]) { err in
        if let err = err {
            print("Error adding ride: \(err)")
            completion(nil, err)
        } else {
            print("Ride added with ID: \(ref!.documentID)")
            completion(ref?.documentID, nil)
            // I'd currently have to use this `ref?.documentID` and edit this document immediately after creating. 2 calls to the database.
        }
    }
}

虽然有一个完美的答案,但 FireStore 具有您需要的内置功能,并且不需要对数据库进行两次调用。事实上,它不需要对数据库进行任何调用。

这是一个例子

    let testRef = self.db.collection("test_node")
    let someData = [
        "child_key": "child_value"
    ]

    let aDoc = testRef.document() //this creates a document with a documentID
    print(aDoc.documentID) //prints the documentID, no database interaction
    //you could add the documentID to an object etc at this point
    aDoc.setData(someData) //stores the data at that documentID

查看文档添加文档 https://firebase.google.com/docs/firestore/manage-data/add-data#add_a_document了解更多信息。

在某些情况下,使用以下内容创建文档引用可能会很有用: 自动生成的 ID,稍后使用参考。对于这个用例, 你可以调用 doc():

您可能需要考虑稍微不同的方法。您也可以在写入后的闭包中获取文档 ID。所以让我们给你一个很酷的旅程(课程)

class RideClass {
    var availableSeats: Int
    var carType: String
    var dateCreated: String
    var ID: String

    init(seats: Int, car: String, createdDate: String) {
        self.availableSeats = seats
        self.carType = car
        self.dateCreated = createdDate
        self.ID = ""
    }

    func getRideDict() -> [String: Any] {
        let dict:[String: Any] = [
            "availableSeats": self.availableSeats,
            "carType": self.carType,
            "dateCreated": self.dateCreated
        ]
        return dict
    }
}

然后编写一些代码来创建行程,将其写出来并利用它自动创建的 documentID

    var aRide = RideClass(seats: 3, car: "Lincoln", createdDate: "20190122")

    var ref: DocumentReference? = nil
    ref = db.collection("rides").addDocument(data: aRide.getRideDict() ) { err in
        if let err = err {
            print("Error adding document: \(err)")
        } else {
            aRide.ID = ref!.documentID
            print(aRide.ID) //now you can work with the ride and know it's ID
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将文档的文档 ID 添加到其自己的 Firestore 文档 - Swift 4 的相关文章

随机推荐

  • 实现你自己的 sizeof [重复]

    这个问题在这里已经有答案了 可能的重复 不使用 sizeof 的数据类型的大小 https stackoverflow com questions 1219199 size of a datatype without using sizeo
  • EF 6 从没有导航属性的其他表中选择

    我有一个小问题需要帮助解决 我有以下情况 例如 我想选择所有养狗的学生 我有 2 张桌子 students id name petid pet id name 但是它们之间没有指定的外键 没有导航属性 虽然我有但没有指定它并且我不想要我的情
  • 如何在 IntelliJ IDEA 中构建 OS X Java 应用程序包?

    我正在尝试在 IntelliJ IDEA 中为 mac 构建一个 Java 应用程序 苹果开发者文档说我需要做一个Java 应用程序包 http developer apple com library mac documentation J
  • 在 Mac OS X 上升级 Ruby

    我正在阅读 Programming Ruby 一书 并希望升级我计算机上的 Ruby 版本 我运行 Mac OS X Snow Leopard 并在命令行中执行 ruby v 显示我正在运行 Ruby 1 8 7 我安装了 MacPorts
  • 在 C++ 中返回浮点数组

    我目前有一个 C 中的 4x4 矩阵类 并将每个值存储为浮点数 Matrix4d Matrix4d const float m00 const float m01 const float m02 const float m03 const
  • Grails:在 gsp 中显示创建的图像

    我对 Grails 很陌生 所以这个问题可能有一个非常简单的答案 我正在尝试在 gsp 中显示动态创建的图像 图像不存储在数据库中 它是在控制器中动态创建的 我本质上拥有的是一个 gsp 它有一个接受一组用户输入的表单 requestGra
  • 带参数的 Laravel-4 路由被调用两次

    我注意到我正在使用 laravel 开发的应用程序的激活路线发生了奇怪的行为 并且经过几个小时的 xdebug 等调试后 我发现我的路线有时实际上被调用了两次 为了重现这种情况 我使用默认文件创建了一个全新的 Laravel 项目 并添加了
  • 如何更改 dplyr 链中数据第一行的列名称

    我尝试使用数据的第一行重命名列名称 使用第一行数据作为 r 中的列名称 https stackoverflow com questions 32054368 use first row data as column names in r 将
  • 我在绘制球体及其曲线时遇到问题

    我正在尝试在球体上绘制一条曲线 但无法同时绘制它们 我确定了一些要点欧几里得范数10对于我的曲线 以及绘制球体的其他一些点半径10 分别如下 曲线点 random numbers basevalues np linspace 0 9 0 9
  • 快速成功退出 C++,分配大量对象

    我正在寻找一种方法来快速退出已使用 C 类在内存中分配大量结构的 C 程序正确完成 但在程序中最后 返回 后 所有自动析构函数都会启动 问题是程序通过大量 C 类结构分配了大约 15GB 内存 并且此自动析构过程需要大约还需要 1 个小时才
  • 了解截断二十面体的几何形状,以进行渲染

    我正在尝试使用可点击区域来渲染像上面这样的截断二十面体Three js http stemkoski github io Three js js Three js 我找到了正二十面体的代码 var t 1 Math sqrt 5 2 var
  • 指定 Xaml 中开始标记和结束标记之间的属性

    考虑以下 Xaml
  • 逻辑应用 blob 触发器未在子文件夹上触发

    我指的是这个反馈 在子文件夹中添加文件时触发 Azure 存储 Blob 触发器 https feedback azure com forums 287593 logic apps suggestions 20164843 azure st
  • 使用cleartool findmerge 命令在clearcase 中自动合并

    我正在编写一个脚本来自动执行一些合并操作 我想使用以下命令来执行此操作 cleartool findmerge file name fver main branch name LATEST merge log NUL c Automatic
  • AttributeError:“SQLAlchemy”对象没有属性“模型”[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 AttributeError sqlalchemy 对象没有属性 模型 有时会出现 ModuleNotFoundError 没有名
  • 将数据传递给 vue.js 中的组件

    我正在努力理解如何在 vue js 中的组件之间传递数据 我已经通读了几遍文档并查看了许多 vue 相关问题和教程 但我仍然不明白 为了解决这个问题 我希望能帮助完成一个非常简单的例子 在一个组件中显示用户列表 完成 单击链接 完成 时将用
  • 可变字体和常规字体有什么区别

    我正在阅读有关可变字体的内容 但我不明白这个概念 有 5 个注册轴 wght wdth ital slnt opsz 字体粗细已经预先存在 我们每天都会在 CSS 中使用它 那么可变字体和常规字体有什么区别呢 另外 如果我输入一系列font
  • 从哪个 Linux 内核/libc 版本开始,Java Runtime.exec() 在内存方面是安全的?

    在工作中 我们的目标平台之一是运行 Linux 的资源受限的迷你服务器 内核 2 6 13 基于旧 Fedora Core 的自定义发行版 该应用程序是用 Java Sun JDK 1 6 04 编写的 Linux OOM Killer 配
  • 如何改变TDateTimePicker的颜色?

    如何更改 a 的颜色TDateTimePicker A 日期和时间选择器可以有一种颜色 通常这是通过设置来完成的Color procedure TForm1 FormCreate Sender TObject begin DateTimeP
  • 将文档的文档 ID 添加到其自己的 Firestore 文档 - Swift 4

    如何将我刚刚添加到 firestore 数据库的文档的文档 ID 添加到该文档 我想这样做 以便当用户检索 乘车 对象并选择预订它时 我可以知道他们预订了哪些特定乘车 我面临的问题是 在创建文档 ID 之前 您无法获取文档 ID 因此将其添