【问题标题】:How to remove Cloud Firestore field type specifiers when using REST API?使用 REST API 时如何删除 Cloud Firestore 字段类型说明符?
【发布时间】:2018-01-15 14:49:48
【问题描述】:

我完全编造了“类型说明符”这个名称。我的意思是值前面的stringValue 键。通常我希望得到更标准的回复:"name" : "name_here"

{
 "fields": {
  "name": {
   "stringValue": "name_here"
  }
 }
}

在拨打GET 电话时是否可以删除这些?

更重要的是,很高兴了解它的结构为何如此。即使是POST-ing 数据?简单的答案可能是因为 Cloud Firestore 与实时数据库不同,需要知道具体类型,但更深层的原因是什么?有没有这样的格式的“官方”名称,我可以做更多的研究?

例如,推理是否与Protocol Buffers 有关?有没有办法请求 protobuf 而不是 JSON?

架构:

【问题讨论】:

  • 这个问题有点不清楚,但你的 Firebase 结构看起来那样的原因是因为......你把它放在那里。 NoSQL 数据库中没有模式或预先确定的结构;只有键:值对。在上面的结构中,键 stringValue 作为 name_here 的值。 name 是该子节点的父键,fieldsname 键的父键。如果您想知道它是如何做到的,请发布您的代码,我们会看看。
  • @Jay 我希望它是 "name" : "name_here" 而不是 "name": { "stringValue": "name_here" } 在进行 GET 调用时。我没有“创建该架构”,而是创建了"name" : "name_here"。这是Cloud Firestore 不是Realtime Database。除非我设置错误,否则按照标准,这就是它的工作方式。我使用 Google APIs Explorer 进行 GET 调用。
  • 我不相信 Firestore 会直接添加该键,因为它仍然是键:值对和键名取决于您。你能把你写那个节点的代码贴出来让我们看看吗?
  • @Jay 您目前在使用 Firestore 吗?还是有?我可能会做一些疯狂的事情,但我只是在做标准的事情。我上传了截图。
  • 是的,我是。创建该数据的代码在哪里? 不要在您的问题中发布代码或 Firebase 结构的图片。见Don't Use Screenshots

标签: firebase google-cloud-firestore


【解决方案1】:

是否可以在进行 GET 调用时删除它们?

简而言之,不。Firestore REST API GET 返回一个 Document 实例。 见https://firebase.google.com/docs/firestore/reference/rest/v1beta1/projects.databases.documents#Document

{
  "name": string,
  "fields": {
    string: {
      object(Value)
    },
    ...
  },
  "createTime": string,
  "updateTime": string,
}

关于“协议缓冲区”:当数据被反序列化时,您可以只使用一个函数来转换为您希望使用的结构,例如如果您愿意,可能会使用协议缓冲区,但似乎有 SWIFT、OBJECTIVE-C、ANDROID、JAVA、PYTHON、NODE.JS、GO 的库,也许您不需要使用 REST API 并制作协议缓冲区。

希望解决您的“更重要”评论:

正如您在问题中所回避的那样,Firestore 具有与实时数据库不同的数据模型。 实时数据库数据模型允许 JSON 对象具有您想要定义的模式和关键字。 正如您所指出的,Firestore 数据模型使用预定义的架构,在这方面,某些关键字和结构无法更改。

此处描述了 Cloud Firestore 数据模型:https://firebase.google.com/docs/firestore/data-model

实际上,数据模型是 / 其中文档可以包含子集合,并且关键字“name”、“fields”、“createdTime”、“upTime”位于 Firestore 文档(预定义的 JSON 文档架构)中。 成功的 Firestore REST API GET 请求会生成一个 Document 实例,该实例可能包含文档集合或单个文档。见https://firebase.google.com/docs/firestore/reference/rest/。 API 发现文档还有助于提供有关 api 的一些详细信息: https://firestore.googleapis.com/$discovery/rest?version=v1beta1

REST API URL 结构示例如下:

https://firestore.googleapis.com/v1beta1/projects/<yourprojectid>/databases/(default)/documents/<collectionName>/<documentID>

可以屏蔽文档中的某些字段,但 Firestore 文档架构仍将保留。看三个例子 GET:

看另一个例子,运行查询的 REST API https://firebase.google.com/docs/firestore/reference/rest/v1beta1/projects.databases.documents/runQuery 响应正文的格式为:

{
  "transaction": string,
  "document": {
    object(Document)
  },
  "readTime": string,
  "skippedResults": number,
}

总结:

实时数据库 REST API 将根据您的“更标准的响应”根据路径/节点返回对象的 JSON。

Firestore REST API 返回特定的 Firestore 预定义响应结构。

有可用于多种语言的 API 库,因此也许没有必要使用 REST API 并制作您自己的协议缓冲区,但如果您需要,它可能是可行的。

【讨论】:

    【解决方案2】:

    我不明白为什么有人只是说你不能也不要尝试想一些解决方案来寻求帮助!说真的,这是一个真正的问题解决者?

    无论如何,我创建了一个可以帮助您的脚本(现在可能已经晚了哈哈哈)。

    脚本编码 json 并将其替换为字符串以修改和删除 Google 类型字段(低进程)。

    这是一个简单的代码,我知道如果有必要你可以改进它!

    警告!!

    也许您会遇到包含“{}”或“[]”的值的问题。这可以通过将包含此元素的所有字符串转换为其他字符的 foreach 来解决(如“◘”或“♦”,一些您知道不会有价值的字符。

    例如:嗨 {Lorena}! ------> 嗨◘Lorena♦!

    处理完毕后,再次转换为 '{}' 或 '[]'

    您不能拥有与 GOOGLE 字段同名的字段

    例如:stringValue、arrayValue 等

    您可以在此链接中查看和下载脚本: https://github.com/campostech/scripts-helpers/blob/master/CLOUD%20STORE%20JSON%20FIELDS%20REMOVER/csjfr.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2020-03-23
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多