Firebase Firestore 服务器时间戳在列表中时失败,使用 firebase-admin python sdk

问题描述 投票:0回答:1

我按照这篇文章中的指示在我的Firestore数据中插入服务器时间戳,只要时间戳位于地图内,它就可以正常工作。但如果将地图进一步嵌入到列表中,则会失败。这是不允许的吗?

这是测试代码:

firebase_admin.initialize_app()
client = firestore.client()
doc_ref = client.collection('test').document('timetest')
changes = {
    'name': 'test name',
    'timetest': firestore.SERVER_TIMESTAMP,
}
print('Writing timestamp without list')
doc_ref.set({'test_nolist': changes})
print('Writing timestamp inside a list')
doc_ref.set({'test_withlist': [changes]})

这是包含错误的输出:

Writing timestamp without list
Writing timestamp inside a list
Traceback (most recent call last):
  File "firestore_write.py", line 477, in <module>
    testTimestamp()
  File "firestore_write.py", line 466, in testTimestamp
    incident_doc_ref.set({'test_withlist': [changes]})
  File "/Users/fred/Library/Python/3.7/lib/python/site-packages/google/cloud/firestore_v1/document.py", line 233, in set
    batch.set(self, document_data, merge=merge)
  File "/Users/fred/Library/Python/3.7/lib/python/site-packages/google/cloud/firestore_v1/batch.py", line 88, in set
    reference._document_path, document_data
  File "/Users/fred/Library/Python/3.7/lib/python/site-packages/google/cloud/firestore_v1/_helpers.py", line 625, in pbs_for_set_no_merge
    write_pbs = [extractor.get_update_pb(document_path)]
  File "/Users/fred/Library/Python/3.7/lib/python/site-packages/google/cloud/firestore_v1/_helpers.py", line 483, in get_update_pb
    name=document_path, fields=encode_dict(self.set_fields)
  File "/Users/fred/Library/Python/3.7/lib/python/site-packages/google/cloud/firestore_v1/_helpers.py", line 215, in encode_dict
    return {key: encode_value(value) for key, value in six.iteritems(values_dict)}
  File "/Users/fred/Library/Python/3.7/lib/python/site-packages/google/cloud/firestore_v1/_helpers.py", line 215, in <dictcomp>
    return {key: encode_value(value) for key, value in six.iteritems(values_dict)}
  File "/Users/fred/Library/Python/3.7/lib/python/site-packages/google/cloud/firestore_v1/_helpers.py", line 190, in encode_value
    value_list = [encode_value(element) for element in value]
  File "/Users/fred/Library/Python/3.7/lib/python/site-packages/google/cloud/firestore_v1/_helpers.py", line 190, in <listcomp>
    value_list = [encode_value(element) for element in value]
  File "/Users/fred/Library/Python/3.7/lib/python/site-packages/google/cloud/firestore_v1/_helpers.py", line 195, in encode_value
    value_dict = encode_dict(value)
  File "/Users/fred/Library/Python/3.7/lib/python/site-packages/google/cloud/firestore_v1/_helpers.py", line 215, in encode_dict
    return {key: encode_value(value) for key, value in six.iteritems(values_dict)}
  File "/Users/fred/Library/Python/3.7/lib/python/site-packages/google/cloud/firestore_v1/_helpers.py", line 215, in <dictcomp>
    return {key: encode_value(value) for key, value in six.iteritems(values_dict)}
  File "/Users/fred/Library/Python/3.7/lib/python/site-packages/google/cloud/firestore_v1/_helpers.py", line 200, in encode_value
    "Cannot convert to a Firestore Value", value, "Invalid type", type(value)
TypeError: ('Cannot convert to a Firestore Value', Sentinel: Value used to set a document field to the server timestamp., 'Invalid type', <class 'google.cloud.firestore_v1.transforms.Sentinel'>)
python firebase google-cloud-firestore timestamp
1个回答
0
投票

我很抱歉造成误解,如果您需要操作列表,我认为您可以使用这样的东西:

accesses.update({ u"mylist":firestore.ArrayUnion([firestore.SERVER_TIMESTAMP])})

您可以在这里找到完整的示例

© www.soinside.com 2019 - 2024. All rights reserved.