firebase 如何手动设置Firestore文档ID以保存调用Firestore API的新文档?

zed5wv10  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(121)

我发现以下问题试图保存一个新的文档到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?

ctehm74n

ctehm74n1#

看一下documentation for creating documents,如果你想指定一个文档ID,它说你应该把它作为一个名为documentId的查询参数传递:
要用于此文档的客户端分配的文档ID。
可选。如果未指定,将由服务分配ID。

相关问题