You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中查询Firebase自动ID节点下usedBy内的userid是否存在

解决Firebase优惠码重复使用检查问题

问题分析

你当前的数据库结构中,usedBy 下是自动生成的ID节点,每个节点存储用户ID。直接用 queryEqual(toValue: userid) 无法正确查询,因为缺少对节点值的排序指定。

方案一:调整查询代码

在查询前先调用 queryOrderedByValue(),让Firebase按节点值排序后再匹配:

promoCodes.child(code).child("usedBy")
    .queryOrderedByValue()
    .queryEqual(toValue: userid)
    .observeSingleEvent(of: .value) { snapshot in
        if snapshot.exists() {
            // 用户已使用过该优惠码
            print("优惠码已被使用")
        } else {
            // 用户未使用过,可以使用
            print("优惠码可使用")
        }
    }

方案二:优化数据库结构(更高效)

把 usedBy 的结构改成以用户ID作为节点键,值设为 true,这样不需要查询,直接判断节点是否存在即可,性能更好:

promoCodes
  - 优惠码ID
    - usedBy
      - 用户ID1: true
      - 用户ID2: true

对应的Swift代码:

promoCodes.child(code).child("usedBy").child(userid).observeSingleEvent(of: .value) { snapshot in
    if snapshot.exists() {
        print("优惠码已被使用")
    } else {
        // 标记用户使用优惠码
        promoCodes.child(code).child("usedBy").child(userid).setValue(true)
        print("优惠码使用成功")
    }
}

内容的提问来源于stack exchange,提问作者tHatpart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:06:27