首页 > 解决方案 > 如何在 Firebase 中侦听和检查特定元素的值?

问题描述

我有一些带有机械备件的简单应用程序。我有一个购物车。我想用户将所需的零件添加到他的购物车中,但如果它已经在购物车中,则需要将基本计数更改为 +1。

这是我的 Firebase 结构: 在此处输入图像描述

func addToFirebaseWatchList(object: ObjectFromPartsCatalogueList, user: FirebaseAuth.User){

    self.ref.child("users").child(user.uid).updateChildValues(["userEmail": "\(user.email!)"])
    self.ref.child("users").child(user.uid).child("order").child("\(object.objectFromPartsCatalogueListCode!)").updateChildValues(["count" : "1"])
}

如何检查购物车是否已包含具有相同编号的备件并简单地更新计数?

标签: iosswiftfirebase-realtime-database

解决方案


如果节点的新值取决于其现有值,您可以使用事务执行原子增量。在这里,我建议使用原子增量,但这确实意味着您必须将计数存储为数值(您当前将其作为字符串存储)。

将其存储为数值后,将其递增很简单:

self.ref.child("users").child(user.uid).child("order")
  .child("\(object.objectFromPartsCatalogueListCode!)")
  .updateChildValues(["count" :ServerValue.increment(1) ])

如果该属性尚不存在,则上面将其设置为1. 但是如果你已经有一个非数字值,它就行不通了。因此,只要您愿意擦除现有的字符串count值,就应该一切都好。

我实际上会摆脱"count"那里的财产,然后做:

self.ref.child("users").child(user.uid).child("order")
  .child("\(object.objectFromPartsCatalogueListCode!)")
  .setValue(ServerValue.increment(1))

推荐阅读