我发现以下问题试图保存一个新的文档到Firesotore数据库调用相关的POST API和手动设置文档ID。
我正在使用Python,但我认为问题与语言无关。
我试着解释我做了什么,什么不起作用。我的第一次尝试(可以起作用,但会在Firestore上自动设置文档ID)是:
首先,我创建了这个JSON文档,它将成为我的API的有效负载:
# Convert the record to a dictionary
doc = {
'fields': {
'surname': {'stringValue':record[2]},
'firstName': {'stringValue':record[1]},
'socialSecurityCode': {'stringValue':codici_fiscali_list_as_string},
'city': {'stringValue':record[4]},
'personalPhone': {'stringValue':record[5]},
'personalPhone2': {'stringValue':record[6]},
'personalEmail': {'stringValue':emails_list_as_string},
'pazPres': {'stringValue':record[7]},
'pazNotes': {'stringValue':record[8]},
'pazMemo': {'stringValue':record[9]},
'isArchived': {'booleanValue':isArchived},
'isMigrated': {'booleanValue':True},
#'decomposition_keyword_search_list':{'arrayValue':{'values':decomposition_keyword_search_list}}
"decomposition_keyword_search_list":{
"arrayValue":{
"values":[
]
}
}
}
}
然后我通过以下代码行执行API调用:
api_endpoint = 'https://firestore.googleapis.com/v1/projects/MY-PROJECT-NAME/databases/(default)/documents/test/'
response = requests.post(api_endpoint, json=doc)
它工作正常,并把预期的文档放入我的test集合中。但这样ID是由Firestore自动生成的。由于某种原因,我必须使用变量的内容作为ID(我的ID必须是我的**record[0]**的值,这是一个唯一的字符串)
因此,我尝试通过以下方式更改以前的API端点:
api_endpoint = 'https://firestore.googleapis.com/v1/projects/MY-PROJECT-NAME/databases/(default)/documents/test/'+ record[0]
我以为它会使用**record[0]**作为文档ID创建文档,但似乎我错了,因为我得到了以下错误消息:
Error saving document: {
"error": {
"code": 400,
"message": "Document parent name \"projects/MY-PROJECT-NAME/databases/(default)/documents/test\" lacks \"/\" at index 71.",
"status": "INVALID_ARGUMENT"
}
}
那么,出了什么问题?我错过了什么?如何正确地手动设置我正在创建的调用以前的API的文档的ID?
1条答案
按热度按时间ctehm74n1#
看一下documentation for creating documents,如果你想指定一个文档ID,它说你应该把它作为一个名为
documentId
的查询参数传递:要用于此文档的客户端分配的文档ID。
可选。如果未指定,将由服务分配ID。