有没有一种方法可以在Firestore中创建的数据中存储DocumentReference?

时间:2020-09-23 14:05:35

标签: swift firebase google-cloud-firestore

我正在尝试将Firestore唯一ID存储在我创建的数据中。我相信在处理完数据后会创建唯一的ID,这就是为什么我的代码下面的结果为nil。这不可能吗?

netstat

这可以通过uuidString以某种方式实现吗?

var ref: DocumentReference? = nil
ref = Firestore.firestore().collection("all_posts").addDocument(data: [
                
            "author": [
                "uid": userId,
                "username": "John"
            ],
            "PostId": ref!.documentID,
                     
        ]) { (err) in
            if let err = err {
                print(err)

2 个答案:

答案 0 :(得分:2)

在这种情况下,您需要:

  1. 首先通过调用document()创建对新文档的引用。
  2. 然后写这个新参考。

如果您查看adding a document上的文档中的第三个代码段,可以使用以下方法完成:

var ref: DocumentReference? = nil
ref = Firestore.firestore().collection("all_posts").document()
ref.setData((data: [                
    "author": [
        "uid": userId,
        "username": "John"
    ],
    "PostId": ref!.documentID,
             
]) { (err) in
    if let err = err {
        print(err)

答案 1 :(得分:1)

您可以生成自己的唯一ID:

let uuid = UUID().uuidString
let data: [String: Any] = [
    "author": [
        "uid": userId,
        "username": "John"
    ],
    "PostId": uuid
]

Firestore.firestore().collection("all_posts").document(uuid).setData(data, merge: true) { (error) in
    if let error = error {
        print(error)
    }
}

或者让Firestore生成唯一的ID:

let docRef = Firestore.firestore().collection("all_posts").document()
let docId = docRef.documentID
let data: [String: Any] = [
    "author": [
        "uid": userId,
        "username": "John"
    ],
    "PostId": docId
]

docRef.setData(data, merge: true) { (error) in
    if let error = error {
        print(error)
    }
}

setData(merge: true)将创建该文档(如果尚不存在),并将其合并到其中。当然,您可以直接添加文档而无需这种安全网。而且,由于这些值都不是可选的,因此您也可以采用功能性方法而不使用变量和nil。