How to insert server timestamp in Firestore docume

2019-07-08 05:16发布

I want to insert a document using a REST call to Firestore createDocument method. One of the fields is a timestamp field that should be set on the server. With Android SDK it's as simple as annotating a Date field with @ServerTimestamp and keeping it null — now how do I do it in REST?

{
  "fields": {
    "timezoneId": {
      "stringValue": "Europe\/London"
    },
    "city": {
      "stringValue": "London"
    },
    "timestamp": {
      "timestampValue": "???"
    }
  }
}

I tried using null, 0, empty string, timestamp — everything fails with an error requiring the standard RFC3339 format (e.g. 2018-01-31T13:50:30.325631Z). Is there any placeholder value I can use, or any way to obtain that timestamp?

1条回答
▲ chillily
2楼-- · 2019-07-08 05:41

The Android SDK doesn't execute a createDocument request when creating the document. Instead it uses the write request to issue an update and a transform request at the same time. If you are wanting to only use createDocument, then the answer is no.

Your payload would look something like this:

{
  "writes": [
    {
      "update": {
        "name": "projects/{projectId}/databases/{databaseId}/documents/{document_path}",
        "fields": {
          "timezoneId": {
            "stringValue": "Europe\/London"
          },
          "city": {
            "stringValue": "London"
          }
        }
      },
      // ensure the document doesn't exist
      "currentDocument": {
        "exists": false
      }
    },
    {
      "transform": {
        "document": "projects/{projectId}/databases/{databaseId}/documents/{document_path}",
        "fieldTransforms": [
          {
            "fieldPath": "timestamp",
            "setToServerValue": "REQUEST_TIME"
          }
        ]
      }
    }
  ]
}

The only downside to adding documents this way is you would need to generate the Document ID yourself (the SDK's generate them). I hope this helps.

查看更多
登录 后发表回答