【问题标题】:python - Cloud Firestore - append data to subcollectionpython - Cloud Firestore - 将数据附加到子集合
【发布时间】:2019-03-11 00:00:46
【问题描述】:

是否可以使用 python firebase admin sdk 将数据附加到 cloud firestore 数据库中的子集合?如果是这样,我错过了什么?

我正在尝试将数据附加到位于 googles cloud firestore 中的特定文档的子集合中 - 不是实时数据库。我已经做了相当多的研究,这是迄今为止最流行的资源: add data to firestore 没有明确表示不可能

我能够创建文档、读取文档等。如果不获取整个文档,我似乎无法附加或访问子集合

我的代码流程如下:

import time
import json
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
from firebase_admin import firestore

#authentication
cred = credentials.Certificate('key.json')
app = firebase_admin.initialize_app(cred)

cloudDb = firestore.client()    #open connection. uses 'app' implicitly
doc = cloudDb.collection(collection).document(document)
data['date'] = firestore.SERVER_TIMESTAMP
data['payload'] = [0,1,2,3,4,5]
doc.collection("data").set(data)   #*

#--testing (collection)
# |
#----docId  (document)
#   |
#------company (field)
#------accountinfo(field)
#------data (subcollection)
#     |
#--------date (field)
#--------payload (array)

然而,这在最后一行(带星号的行)失败并出现错误:

('Cannot convert to a Firestore Value', <object object at 0xb6b07e60>, 'Invalid type', <class 'object'>)

【问题讨论】:

  • 请编辑问题以准确显示data 是什么。这就是这里的问题。这与您添加到子集合而不是集合的事实无关。所有集合和子集合都具有相同的 API。
  • 嗨,Doug,我更新了问题以显示什么是数据。它是一个 dict 对象,我可以将其作为文档成功传递到 firestore api,但我无法将同一个 dict obj 传递到子集合的文档中
  • 请显示data 的完整、准确的内容。至少,有人应该能够运行您的确切代码来重现问题。此外,您应该说明代码的预期结果。您认为该文档之后应该是什么样子?

标签: python-3.x google-cloud-firestore


【解决方案1】:

好的,多亏了 Doug 让我编写了一个可以在另一台机器上运行的脚本,所以解决了我自己的问题。 (即一个较小的脚本,较少进行) 我的问题是尝试将集合设置为我的数据对象,而不是在集合中创建文档并进行设置。即:

doc.collection("data").set(data)  #error

doc.collection("data").document().set(data)  #success

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 2023-03-24
    • 2019-12-24
    • 2021-11-30
    • 2021-09-03
    • 2021-01-18
    • 2020-07-11
    相关资源
    最近更新 更多