从Firestore Swift获取文档ID

3

我正在尝试通过执行以下查询从Firestore中获取文档ID:

func updateStatusInFirestore() {

let orderid = saleOrder.first?.Orderid ?? ""
print(orderid)
let settings = db.settings
settings.areTimestampsInSnapshotsEnabled = true
db.settings = settings
 self.db.collection("SaleOrders").whereField("orderid", isEqualTo: "\(orderid)").getDocuments { (snapshot, err) in

    if let err = err {
        print("Error getting documents: \(err)")
    } else {
        for document in snapshot!.documents {
            self.documentid = document.documentID
            print(self.documentid)
        }
    }
}

}

我正在从我的Model类中获取订单编号,并打印出订单编号的值,但是当我尝试将其放入whereField查询中时,查询不执行,我在控制台上没有得到任何结果。

如果我像这样使用它,它可以工作

self.db.collection("SaleOrders").whereField("orderid", isEqualTo: "ji20190205091948").getDocuments

但是当我像这样使用时

let orderid = saleOrder.first?.Orderid ?? ""
self.db.collection("SaleOrders").whereField("orderid", isEqualTo: "\(orderid)").getDocuments

它没有起作用。我做错了什么?请帮忙吗?


orderId已经是一个String,不要写"\(orderid)",直接使用self.db.collection("SaleOrders").whereField("orderid", isEqualTo: orderid).getDocuments - Galo Torres Sevilla
我尝试了,但它没有起作用。 - Wings
好的,这是一个可选项。所以像这样解包它:guard let orderid = saleOrder.first?.Orderid else { return } 然后执行 self.db.collection("SaleOrders").whereField("orderid", isEqualTo: orderid).getDocuments - Galo Torres Sevilla
仍然是一样的,还是不起作用 :( - Wings
解包后它是否打印相同的值?我没有看到其他问题的原因。 - Galo Torres Sevilla
@GaloTorresSevilla....感谢您的帮助。 - Wings
1个回答

5

我解决了这个问题。我们只需要添加一个if条件,就可以从Firestore获取该特定集合的文档ID。

for document in snapshot!.documents {

  if document == document {
   print(document.documentID)
     }
       }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接