api - 使用简单的 https 请求更新 Firestore 数据库(云)上的单个字段
问题描述
我目前正在使用 Swift (macOS) 并且没关系。
我可以通过 Firestore 的这个简单的获取请求来获取我的数据库数据
https://firestore.googleapis.com/v1beta1/projects/MY_PROJECT_NAME/databases/(default)/documents/" + "User_email" + "?pageSize=100&pageToken=" + "NextPage_Id"
现在我想更新数据库中的一个文件,我不知道怎么做。
Firebase api 指南对我来说太复杂了,我不明白。
我找到了这个获取请求网址:
https://firestore.googleapis.com/v1beta1/projects/{projectId}/databases/{databaseId}/documents/{document_path}?updateMask.fieldPaths=status&updateMask.fieldPaths=title
但是当我尝试它时,它给了我这个错误:
{
"details" : [
{
"fieldViolations" : [
{
"description" : "Invalid JSON payload received. Unknown name \"updateMask.fieldPaths\": Cannot bind query parameter. Field 'updateMask' could not be found in request message."
}
],
"@type" : "type.googleapis.com\/google.rpc.BadRequest"
}
],
"code" : 400,
"message" : "Invalid JSON payload received. Unknown name \"updateMask.fieldPaths\": Cannot bind query parameter. Field 'updateMask' could not be found in request message.",
"status" : "INVALID_ARGUMENT"
}
}
我像这样使用上面的网址:
https://firestore.googleapis.com/v1beta1/projects/MY_PROJECT_NAME/databases/(default)/documents/" + User_email + "/MY_COLLECTION_ID/?updateMask.fieldPaths=name&updateMask.fieldPaths=aaaa
我哪里做错了?
解决方案
在得到 FireBase 支持的帮助后,我终于得到了答案。
请求类型必须是 PATCH,而不是 POST 或 GET 或其他任何内容。
请求格式必须为“application/json”
Body 参数类型必须是 RAW 数据而不是表单数据,例如:
["fields": ["finished": ["booleanValue": true]]] // this is the value you want to update
网址必须是这样的:
https://firestore.googleapis.com/v1beta1/\(VALUE_PATH)/?updateMask.fieldPaths=\(NAME_OF_KEY_YOU_WANT_TO_UPDATE)
例如:
https://firestore.googleapis.com/v1beta1/projects/PROJECT_NAME/databases/(default)/documents/USER_EMAIL/4EJzurX9QWVnC1uG6sRv/?updateMask.fieldPaths=finished
而已。
这个请求很酷的一点是,如果您要更新的字段不存在,它会为您创建一个。
推荐阅读
- c - 求 MxM 矩阵的逆矩阵 - 使用 gauss-jordan 消元法
- node.js - 如何在MongoDB中聚合不同的数组字段
- docker - Dockerfile:命令在 Dockerfile 中有效,但在 shell 脚本中无效
- mongodb - mongoDB 中是否有一种有效的方法来获取组合结果文档?
- javascript - 你能用受控组件 React 控制虚拟 DOM
- javascript - 无法使用 Node Js 从 HTML 表单中获取输入
- c# - 如何检查用户名是否有3位数字
- java - 具有两个活动作为输入点的 Android 应用
- ios - 确定 UIView 数组中的 UIView 是否完全相互重叠,然后调整位置
- java - 在 Java 中使用列表时覆盖 equals()