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

如何用Firestore Cloud REST API+Redux Toolkit Query自定义ID创建文档

正确实现Firestore自定义ID文档创建(结合RTK Query)

你之前的问题出在请求方法和API规则不匹配:Firestore REST API里,POST /users是集合级请求,专门用来自动生成ID创建文档;要指定自定义ID创建文档,得用文档级请求,把方法改成PUT而非继续用POST。

修正后的完整代码

const baseQuery = fetchBaseQuery({
  baseUrl: "https://firestore.googleapis.com/v1/projects/[project-id]/databases/(default)/documents",
});

const userApi = createApi({
  baseQuery: baseQuery,
  reducerPath: "users",
  endpoints: (builder) => ({
    createUserWithCustomId: builder.mutation({
      query: (userInfo: RegisterUser) => ({
        url: `/users/${userInfo.id}`, // 自定义ID嵌入文档路径
        method: "PUT", // 核心改动:替换POST为PUT
        body: {
          fields: {
            email: { stringValue: userInfo.email },
            fullname: { stringValue: userInfo.fullname },
            trips: { arrayValue: { values: [] } }, // 注意:arrayValue必须嵌套values字段,空数组也要按此格式写
          },
        },
      }),
    }),
  }),
});

关键细节说明

  • PUT方法的作用:PUT是文档级写入请求,目标文档不存在就创建,存在则全量覆盖。如果想避免覆盖已有文档,可在URL后加?createMask=*参数,此时若文档已存在会返回409冲突错误,防止误操作。
  • 数组格式修正:你之前写的trips: { arrayValue: [] }不符合Firestore REST的格式要求,必须写成{ arrayValue: { values: [] } },否则会触发格式校验错误。
  • ID合法性:确保userInfo.id是合法的Firestore文档ID,不能包含/、\、[、]等特殊字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 00:45:14