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

React Native集成Firebase时如何获取当前用户并更新对应数据库字段

错误原因

你的写法存在两个核心问题:

  1. where()条件查询返回的是集合查询对象,调用get()后拿到的是QuerySnapshot类型的集合查询结果,不是单个文档对象,无法直接调用update方法
  2. get()是异步方法,你没有加await等待查询返回结果,直接对Promise对象调用update会直接报错

修复方案(适配现有数据库结构)

你的数据库结构如下:
Firebase数据库结构

按照你现有的集合结构,正确写法如下:

const friendadd = async() => {
  // 先校验登录状态
  const currentUser = firebase.auth().currentUser
  if (!currentUser) return

  try {
    // 等待查询完成,拿到集合查询结果
    const querySnapshot = await firebase.firestore()
      .collection('users')
      .where("UID", "==", currentUser.uid)
      .get()

    // 取出匹配的用户文档
    if (!querySnapshot.empty) {
      // UID唯一,只会有一个匹配文档
      const userDocRef = querySnapshot.docs[0].ref
      // 执行更新
      await userDocRef.update({
        "FriendsList.yVHnHIqhsOYbVbWOM6TbjpU4N3x1": true
      })
    }
  } catch (err) {
    // 可自行处理异常,比如权限不足、网络错误等
    console.log('更新好友列表失败', err)
  }
}

friendadd()

更优实现方案

你提到硬编码文档ID可以更新成功,说明你当前users集合的文档ID是随机生成的,不是用户的auth UID。建议你后续创建用户文档时,直接把用户的auth UID作为文档ID,这样不需要走查询逻辑,直接通过文档ID获取引用,性能更高、代码更简洁:

const friendadd = async() => {
  const currentUser = firebase.auth().currentUser
  if (!currentUser) return

  try {
    // 直接用auth UID作为文档ID获取引用,不需要查询
    await firebase.firestore()
      .collection('users')
      .doc(currentUser.uid)
      .update({
        "FriendsList.yVHnHIqhsOYbVbWOM6TbjpU4N3x1": true
      })
  } catch (err) {
    console.log('更新好友列表失败', err)
  }
}

注意事项

  • 确保Firestore权限规则允许当前用户修改自己的用户文档,避免出现权限拒绝错误
  • 加好友逻辑建议做双向校验,避免重复添加、添加不存在的用户等异常情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:24:01