我按照这篇文章中的指示在我的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'>)