<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="firestore_v1.html">Cloud Firestore API</a> . <a href="firestore_v1.projects.html">projects</a> . <a href="firestore_v1.projects.databases.html">databases</a> . <a href="firestore_v1.projects.databases.documents.html">documents</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#batchGet">batchGet(database, body, x__xgafv=None)</a></code></p>
<p class="firstline">Gets multiple documents.</p>
<p class="toc_element">
  <code><a href="#beginTransaction">beginTransaction(database, body, x__xgafv=None)</a></code></p>
<p class="firstline">Starts a new transaction.</p>
<p class="toc_element">
  <code><a href="#commit">commit(database, body, x__xgafv=None)</a></code></p>
<p class="firstline">Commits a transaction, while optionally updating documents.</p>
<p class="toc_element">
  <code><a href="#createDocument">createDocument(parent, collectionId, body, mask_fieldPaths=None, x__xgafv=None, documentId=None)</a></code></p>
<p class="firstline">Creates a new document.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, currentDocument_updateTime=None, x__xgafv=None, currentDocument_exists=None)</a></code></p>
<p class="firstline">Deletes a document.</p>
<p class="toc_element">
  <code><a href="#get">get(name, transaction=None, mask_fieldPaths=None, x__xgafv=None, readTime=None)</a></code></p>
<p class="firstline">Gets a single document.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, collectionId, orderBy=None, showMissing=None, pageSize=None, mask_fieldPaths=None, x__xgafv=None, pageToken=None, readTime=None, transaction=None)</a></code></p>
<p class="firstline">Lists documents.</p>
<p class="toc_element">
  <code><a href="#listCollectionIds">listCollectionIds(parent, body, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all the collection IDs underneath a document.</p>
<p class="toc_element">
  <code><a href="#listCollectionIds_next">listCollectionIds_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#listen">listen(database, body, x__xgafv=None)</a></code></p>
<p class="firstline">Listens to changes.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body, updateMask_fieldPaths=None, mask_fieldPaths=None, x__xgafv=None, currentDocument_updateTime=None, currentDocument_exists=None)</a></code></p>
<p class="firstline">Updates or inserts a document.</p>
<p class="toc_element">
  <code><a href="#rollback">rollback(database, body, x__xgafv=None)</a></code></p>
<p class="firstline">Rolls back a transaction.</p>
<p class="toc_element">
  <code><a href="#runQuery">runQuery(parent, body, x__xgafv=None)</a></code></p>
<p class="firstline">Runs a query.</p>
<p class="toc_element">
  <code><a href="#write">write(database, body, x__xgafv=None)</a></code></p>
<p class="firstline">Streams batches of document updates and deletes, in order.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="batchGet">batchGet(database, body, x__xgafv=None)</code>
  <pre>Gets multiple documents.

Documents returned by this method are not guaranteed to be returned in the
same order that they were requested.

Args:
  database: string, The database name. In the format:
`projects/{project_id}/databases/{database_id}`. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request for Firestore.BatchGetDocuments.
    "newTransaction": { # Options for creating a new transaction. # Starts a new transaction and reads the documents.
        # Defaults to a read-only transaction.
        # The new transaction ID will be returned as the first response in the
        # stream.
      "readWrite": { # Options for a transaction that can be used to read and write documents. # The transaction can be used for both read and write operations.
        "retryTransaction": "A String", # An optional transaction to retry.
      },
      "readOnly": { # Options for a transaction that can only be used to read documents. # The transaction can only be used for read operations.
        "readTime": "A String", # Reads documents at the given time.
            # This may not be older than 60 seconds.
      },
    },
    "transaction": "A String", # Reads documents in a transaction.
    "documents": [ # The names of the documents to retrieve. In the format:
        # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
        # The request will fail if any of the document is not a child resource of the
        # given `database`. Duplicate names will be elided.
      "A String",
    ],
    "mask": { # A set of field paths on a document. # The fields to return. If not set, returns all fields.
        # 
        # If a document has a field that is not present in this mask, that field will
        # not be returned in the response.
        # Used to restrict a get or update operation on a document to a subset of its
        # fields.
        # This is different from standard field masks, as this is always scoped to a
        # Document, and takes in account the dynamic nature of Value.
      "fieldPaths": [ # The list of field paths in the mask. See Document.fields for a field
          # path syntax reference.
        "A String",
      ],
    },
    "readTime": "A String", # Reads documents as they were at the given time.
        # This may not be older than 60 seconds.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The streamed response for Firestore.BatchGetDocuments.
    "found": { # A Firestore document. # A document that was requested.
        #
        # Must not exceed 1 MiB - 4 bytes.
      "fields": { # The document's fields.
          #
          # The map keys represent field names.
          #
          # A simple field name contains only characters `a` to `z`, `A` to `Z`,
          # `0` to `9`, or `_`, and must not start with `0` to `9`. For example,
          # `foo_bar_17`.
          #
          # Field names matching the regular expression `__.*__` are reserved. Reserved
          # field names are forbidden except in certain documented contexts. The map
          # keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be
          # empty.
          #
          # Field paths may be used in other contexts to refer to structured fields
          # defined here. For `map_value`, the field path is represented by the simple
          # or quoted field names of the containing fields, delimited by `.`. For
          # example, the structured field
          # `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be
          # represented by the field path `foo.x&y`.
          #
          # Within a field path, a quoted field name starts and ends with `` ` `` and
          # may contain any character. Some characters, including `` ` ``, must be
          # escaped using a `\`. For example, `` `x&y` `` represents `x&y` and
          # `` `bak\`tik` `` represents `` bak`tik ``.
        "a_key": { # A message that can hold any of the supported value types.
          "bytesValue": "A String", # A bytes value.
              #
              # Must not exceed 1 MiB - 89 bytes.
              # Only the first 1,500 bytes are considered by queries.
          "booleanValue": True or False, # A boolean value.
          "timestampValue": "A String", # A timestamp value.
              #
              # Precise only to microseconds. When stored, any additional precision is
              # rounded down.
          "referenceValue": "A String", # A reference to a document. For example:
              # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
          "doubleValue": 3.14, # A double value.
          "mapValue": { # A map value. # A map value.
            "fields": { # The map's fields.
                #
                # The map keys represent field names. Field names matching the regular
                # expression `__.*__` are reserved. Reserved field names are forbidden except
                # in certain documented contexts. The map keys, represented as UTF-8, must
                # not exceed 1,500 bytes and cannot be empty.
              "a_key": # Object with schema name: Value
            },
          },
          "stringValue": "A String", # A string value.
              #
              # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
              # Only the first 1,500 bytes of the UTF-8 representation are considered by
              # queries.
          "nullValue": "A String", # A null value.
          "arrayValue": { # An array value. # An array value.
              #
              # Cannot directly contain another array value, though can contain an
              # map which contains another array.
            "values": [ # Values in the array.
              # Object with schema name: Value
            ],
          },
          "integerValue": "A String", # An integer value.
          "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
              # of doubles representing degrees latitude and degrees longitude. Unless
              # specified otherwise, this must conform to the
              # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
              # standard</a>. Values must be within normalized ranges.
            "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
            "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
          },
        },
      },
      "updateTime": "A String", # Output only. The time at which the document was last changed.
          #
          # This value is initially set to the `create_time` then increases
          # monotonically with each change to the document. It can also be
          # compared to values from other documents and the `read_time` of a query.
      "createTime": "A String", # Output only. The time at which the document was created.
          #
          # This value increases monotonically when a document is deleted then
          # recreated. It can also be compared to values from other documents and
          # the `read_time` of a query.
      "name": "A String", # The resource name of the document, for example
          # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
    },
    "missing": "A String", # A document name that was requested but does not exist. In the format:
        # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
    "transaction": "A String", # The transaction that was started as part of this request.
        # Will only be set in the first response, and only if
        # BatchGetDocumentsRequest.new_transaction was set in the request.
    "readTime": "A String", # The time at which the document was read.
        # This may be monotically increasing, in this case the previous documents in
        # the result stream are guaranteed not to have changed between their
        # read_time and this one.
  }</pre>
</div>

<div class="method">
    <code class="details" id="beginTransaction">beginTransaction(database, body, x__xgafv=None)</code>
  <pre>Starts a new transaction.

Args:
  database: string, The database name. In the format:
`projects/{project_id}/databases/{database_id}`. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request for Firestore.BeginTransaction.
    "options": { # Options for creating a new transaction. # The options for the transaction.
        # Defaults to a read-write transaction.
      "readWrite": { # Options for a transaction that can be used to read and write documents. # The transaction can be used for both read and write operations.
        "retryTransaction": "A String", # An optional transaction to retry.
      },
      "readOnly": { # Options for a transaction that can only be used to read documents. # The transaction can only be used for read operations.
        "readTime": "A String", # Reads documents at the given time.
            # This may not be older than 60 seconds.
      },
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response for Firestore.BeginTransaction.
    "transaction": "A String", # The transaction that was started.
  }</pre>
</div>

<div class="method">
    <code class="details" id="commit">commit(database, body, x__xgafv=None)</code>
  <pre>Commits a transaction, while optionally updating documents.

Args:
  database: string, The database name. In the format:
`projects/{project_id}/databases/{database_id}`. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request for Firestore.Commit.
    "writes": [ # The writes to apply.
        # 
        # Always executed atomically and in order.
      { # A write on a document.
        "delete": "A String", # A document name to delete. In the format:
            # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
        "updateMask": { # A set of field paths on a document. # The fields to update in this write.
            #
            # This field can be set only when the operation is `update`.
            # If the mask is not set for an `update` and the document exists, any
            # existing data will be overwritten.
            # If the mask is set and the document on the server has fields not covered by
            # the mask, they are left unchanged.
            # Fields referenced in the mask, but not present in the input document, are
            # deleted from the document on the server.
            # The field paths in this mask must not contain a reserved field name.
            # Used to restrict a get or update operation on a document to a subset of its
            # fields.
            # This is different from standard field masks, as this is always scoped to a
            # Document, and takes in account the dynamic nature of Value.
          "fieldPaths": [ # The list of field paths in the mask. See Document.fields for a field
              # path syntax reference.
            "A String",
          ],
        },
        "update": { # A Firestore document. # A document to write.
            #
            # Must not exceed 1 MiB - 4 bytes.
          "fields": { # The document's fields.
              #
              # The map keys represent field names.
              #
              # A simple field name contains only characters `a` to `z`, `A` to `Z`,
              # `0` to `9`, or `_`, and must not start with `0` to `9`. For example,
              # `foo_bar_17`.
              #
              # Field names matching the regular expression `__.*__` are reserved. Reserved
              # field names are forbidden except in certain documented contexts. The map
              # keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be
              # empty.
              #
              # Field paths may be used in other contexts to refer to structured fields
              # defined here. For `map_value`, the field path is represented by the simple
              # or quoted field names of the containing fields, delimited by `.`. For
              # example, the structured field
              # `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be
              # represented by the field path `foo.x&y`.
              #
              # Within a field path, a quoted field name starts and ends with `` ` `` and
              # may contain any character. Some characters, including `` ` ``, must be
              # escaped using a `\`. For example, `` `x&y` `` represents `x&y` and
              # `` `bak\`tik` `` represents `` bak`tik ``.
            "a_key": { # A message that can hold any of the supported value types.
              "bytesValue": "A String", # A bytes value.
                  #
                  # Must not exceed 1 MiB - 89 bytes.
                  # Only the first 1,500 bytes are considered by queries.
              "booleanValue": True or False, # A boolean value.
              "timestampValue": "A String", # A timestamp value.
                  #
                  # Precise only to microseconds. When stored, any additional precision is
                  # rounded down.
              "referenceValue": "A String", # A reference to a document. For example:
                  # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
              "doubleValue": 3.14, # A double value.
              "mapValue": { # A map value. # A map value.
                "fields": { # The map's fields.
                    #
                    # The map keys represent field names. Field names matching the regular
                    # expression `__.*__` are reserved. Reserved field names are forbidden except
                    # in certain documented contexts. The map keys, represented as UTF-8, must
                    # not exceed 1,500 bytes and cannot be empty.
                  "a_key": # Object with schema name: Value
                },
              },
              "stringValue": "A String", # A string value.
                  #
                  # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                  # Only the first 1,500 bytes of the UTF-8 representation are considered by
                  # queries.
              "nullValue": "A String", # A null value.
              "arrayValue": { # An array value. # An array value.
                  #
                  # Cannot directly contain another array value, though can contain an
                  # map which contains another array.
                "values": [ # Values in the array.
                  # Object with schema name: Value
                ],
              },
              "integerValue": "A String", # An integer value.
              "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                  # of doubles representing degrees latitude and degrees longitude. Unless
                  # specified otherwise, this must conform to the
                  # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                  # standard</a>. Values must be within normalized ranges.
                "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
              },
            },
          },
          "updateTime": "A String", # Output only. The time at which the document was last changed.
              #
              # This value is initially set to the `create_time` then increases
              # monotonically with each change to the document. It can also be
              # compared to values from other documents and the `read_time` of a query.
          "createTime": "A String", # Output only. The time at which the document was created.
              #
              # This value increases monotonically when a document is deleted then
              # recreated. It can also be compared to values from other documents and
              # the `read_time` of a query.
          "name": "A String", # The resource name of the document, for example
              # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
        },
        "currentDocument": { # A precondition on a document, used for conditional operations. # An optional precondition on the document.
            #
            # The write will fail if this is set and not met by the target document.
          "updateTime": "A String", # When set, the target document must exist and have been last updated at
              # that time.
          "exists": True or False, # When set to `true`, the target document must exist.
              # When set to `false`, the target document must not exist.
        },
        "transform": { # A transformation of a document. # Applies a transformation to a document.
            # At most one `transform` per document is allowed in a given request.
            # An `update` cannot follow a `transform` on the same document in a given
            # request.
          "document": "A String", # The name of the document to transform.
          "fieldTransforms": [ # The list of transformations to apply to the fields of the document, in
              # order.
              # This must not be empty.
            { # A transformation of a field of the document.
              "setToServerValue": "A String", # Sets the field to the given server value.
              "maximum": { # A message that can hold any of the supported value types. # Sets the field to the maximum of its current value and the given value.
                  #
                  # This must be an integer or a double value.
                  # If the field is not an integer or double, or if the field does not yet
                  # exist, the transformation will set the field to the given value.
                  # If a maximum operation is applied where the field and the input value
                  # are of mixed types (that is - one is an integer and one is a double)
                  # the field takes on the type of the larger operand. If the operands are
                  # equivalent (e.g. 3 and 3.0), the field does not change.
                  # 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
                  # zero input value is always the stored value.
                  # The maximum of any numeric value x and NaN is NaN.
                "bytesValue": "A String", # A bytes value.
                    #
                    # Must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes are considered by queries.
                "booleanValue": True or False, # A boolean value.
                "timestampValue": "A String", # A timestamp value.
                    #
                    # Precise only to microseconds. When stored, any additional precision is
                    # rounded down.
                "referenceValue": "A String", # A reference to a document. For example:
                    # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
                "doubleValue": 3.14, # A double value.
                "mapValue": { # A map value. # A map value.
                  "fields": { # The map's fields.
                      #
                      # The map keys represent field names. Field names matching the regular
                      # expression `__.*__` are reserved. Reserved field names are forbidden except
                      # in certain documented contexts. The map keys, represented as UTF-8, must
                      # not exceed 1,500 bytes and cannot be empty.
                    "a_key": # Object with schema name: Value
                  },
                },
                "stringValue": "A String", # A string value.
                    #
                    # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes of the UTF-8 representation are considered by
                    # queries.
                "nullValue": "A String", # A null value.
                "arrayValue": { # An array value. # An array value.
                    #
                    # Cannot directly contain another array value, though can contain an
                    # map which contains another array.
                  "values": [ # Values in the array.
                    # Object with schema name: Value
                  ],
                },
                "integerValue": "A String", # An integer value.
                "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                    # of doubles representing degrees latitude and degrees longitude. Unless
                    # specified otherwise, this must conform to the
                    # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                    # standard</a>. Values must be within normalized ranges.
                  "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                  "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
                },
              },
              "increment": { # A message that can hold any of the supported value types. # Adds the given value to the field's current value.
                  #
                  # This must be an integer or a double value.
                  # If the field is not an integer or double, or if the field does not yet
                  # exist, the transformation will set the field to the given value.
                  # If either of the given value or the current field value are doubles,
                  # both values will be interpreted as doubles. Double arithmetic and
                  # representation of double values follow IEEE 754 semantics.
                  # If there is positive/negative integer overflow, the field is resolved
                  # to the largest magnitude positive/negative integer.
                "bytesValue": "A String", # A bytes value.
                    #
                    # Must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes are considered by queries.
                "booleanValue": True or False, # A boolean value.
                "timestampValue": "A String", # A timestamp value.
                    #
                    # Precise only to microseconds. When stored, any additional precision is
                    # rounded down.
                "referenceValue": "A String", # A reference to a document. For example:
                    # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
                "doubleValue": 3.14, # A double value.
                "mapValue": { # A map value. # A map value.
                  "fields": { # The map's fields.
                      #
                      # The map keys represent field names. Field names matching the regular
                      # expression `__.*__` are reserved. Reserved field names are forbidden except
                      # in certain documented contexts. The map keys, represented as UTF-8, must
                      # not exceed 1,500 bytes and cannot be empty.
                    "a_key": # Object with schema name: Value
                  },
                },
                "stringValue": "A String", # A string value.
                    #
                    # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes of the UTF-8 representation are considered by
                    # queries.
                "nullValue": "A String", # A null value.
                "arrayValue": { # An array value. # An array value.
                    #
                    # Cannot directly contain another array value, though can contain an
                    # map which contains another array.
                  "values": [ # Values in the array.
                    # Object with schema name: Value
                  ],
                },
                "integerValue": "A String", # An integer value.
                "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                    # of doubles representing degrees latitude and degrees longitude. Unless
                    # specified otherwise, this must conform to the
                    # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                    # standard</a>. Values must be within normalized ranges.
                  "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                  "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
                },
              },
              "fieldPath": "A String", # The path of the field. See Document.fields for the field path syntax
                  # reference.
              "minimum": { # A message that can hold any of the supported value types. # Sets the field to the minimum of its current value and the given value.
                  #
                  # This must be an integer or a double value.
                  # If the field is not an integer or double, or if the field does not yet
                  # exist, the transformation will set the field to the input value.
                  # If a minimum operation is applied where the field and the input value
                  # are of mixed types (that is - one is an integer and one is a double)
                  # the field takes on the type of the smaller operand. If the operands are
                  # equivalent (e.g. 3 and 3.0), the field does not change.
                  # 0, 0.0, and -0.0 are all zero. The minimum of a zero stored value and
                  # zero input value is always the stored value.
                  # The minimum of any numeric value x and NaN is NaN.
                "bytesValue": "A String", # A bytes value.
                    #
                    # Must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes are considered by queries.
                "booleanValue": True or False, # A boolean value.
                "timestampValue": "A String", # A timestamp value.
                    #
                    # Precise only to microseconds. When stored, any additional precision is
                    # rounded down.
                "referenceValue": "A String", # A reference to a document. For example:
                    # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
                "doubleValue": 3.14, # A double value.
                "mapValue": { # A map value. # A map value.
                  "fields": { # The map's fields.
                      #
                      # The map keys represent field names. Field names matching the regular
                      # expression `__.*__` are reserved. Reserved field names are forbidden except
                      # in certain documented contexts. The map keys, represented as UTF-8, must
                      # not exceed 1,500 bytes and cannot be empty.
                    "a_key": # Object with schema name: Value
                  },
                },
                "stringValue": "A String", # A string value.
                    #
                    # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes of the UTF-8 representation are considered by
                    # queries.
                "nullValue": "A String", # A null value.
                "arrayValue": { # An array value. # An array value.
                    #
                    # Cannot directly contain another array value, though can contain an
                    # map which contains another array.
                  "values": [ # Values in the array.
                    # Object with schema name: Value
                  ],
                },
                "integerValue": "A String", # An integer value.
                "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                    # of doubles representing degrees latitude and degrees longitude. Unless
                    # specified otherwise, this must conform to the
                    # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                    # standard</a>. Values must be within normalized ranges.
                  "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                  "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
                },
              },
              "appendMissingElements": { # An array value. # Append the given elements in order if they are not already present in
                  # the current field value.
                  # If the field is not an array, or if the field does not yet exist, it is
                  # first set to the empty array.
                  #
                  # Equivalent numbers of different types (e.g. 3L and 3.0) are
                  # considered equal when checking if a value is missing.
                  # NaN is equal to NaN, and Null is equal to Null.
                  # If the input contains multiple equivalent values, only the first will
                  # be considered.
                  #
                  # The corresponding transform_result will be the null value.
                "values": [ # Values in the array.
                  # Object with schema name: Value
                ],
              },
              "removeAllFromArray": { # An array value. # Remove all of the given elements from the array in the field.
                  # If the field is not an array, or if the field does not yet exist, it is
                  # set to the empty array.
                  #
                  # Equivalent numbers of the different types (e.g. 3L and 3.0) are
                  # considered equal when deciding whether an element should be removed.
                  # NaN is equal to NaN, and Null is equal to Null.
                  # This will remove all equivalent values if there are duplicates.
                  #
                  # The corresponding transform_result will be the null value.
                "values": [ # Values in the array.
                  # Object with schema name: Value
                ],
              },
            },
          ],
        },
      },
    ],
    "transaction": "A String", # If set, applies all writes in this transaction, and commits it.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response for Firestore.Commit.
    "writeResults": [ # The result of applying the writes.
        #
        # This i-th write result corresponds to the i-th write in the
        # request.
      { # The result of applying a write.
        "updateTime": "A String", # The last update time of the document after applying the write. Not set
            # after a `delete`.
            #
            # If the write did not actually change the document, this will be the
            # previous update_time.
        "transformResults": [ # The results of applying each DocumentTransform.FieldTransform, in the
            # same order.
          { # A message that can hold any of the supported value types.
            "bytesValue": "A String", # A bytes value.
                #
                # Must not exceed 1 MiB - 89 bytes.
                # Only the first 1,500 bytes are considered by queries.
            "booleanValue": True or False, # A boolean value.
            "timestampValue": "A String", # A timestamp value.
                #
                # Precise only to microseconds. When stored, any additional precision is
                # rounded down.
            "referenceValue": "A String", # A reference to a document. For example:
                # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
            "doubleValue": 3.14, # A double value.
            "mapValue": { # A map value. # A map value.
              "fields": { # The map's fields.
                  #
                  # The map keys represent field names. Field names matching the regular
                  # expression `__.*__` are reserved. Reserved field names are forbidden except
                  # in certain documented contexts. The map keys, represented as UTF-8, must
                  # not exceed 1,500 bytes and cannot be empty.
                "a_key": # Object with schema name: Value
              },
            },
            "stringValue": "A String", # A string value.
                #
                # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                # Only the first 1,500 bytes of the UTF-8 representation are considered by
                # queries.
            "nullValue": "A String", # A null value.
            "arrayValue": { # An array value. # An array value.
                #
                # Cannot directly contain another array value, though can contain an
                # map which contains another array.
              "values": [ # Values in the array.
                # Object with schema name: Value
              ],
            },
            "integerValue": "A String", # An integer value.
            "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                # of doubles representing degrees latitude and degrees longitude. Unless
                # specified otherwise, this must conform to the
                # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                # standard</a>. Values must be within normalized ranges.
              "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
              "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
            },
          },
        ],
      },
    ],
    "commitTime": "A String", # The time at which the commit occurred.
  }</pre>
</div>

<div class="method">
    <code class="details" id="createDocument">createDocument(parent, collectionId, body, mask_fieldPaths=None, x__xgafv=None, documentId=None)</code>
  <pre>Creates a new document.

Args:
  parent: string, The parent resource. For example:
`projects/{project_id}/databases/{database_id}/documents` or
`projects/{project_id}/databases/{database_id}/documents/chatrooms/{chatroom_id}` (required)
  collectionId: string, The collection ID, relative to `parent`, to list. For example: `chatrooms`. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A Firestore document.
    # 
    # Must not exceed 1 MiB - 4 bytes.
  "fields": { # The document's fields.
      # 
      # The map keys represent field names.
      # 
      # A simple field name contains only characters `a` to `z`, `A` to `Z`,
      # `0` to `9`, or `_`, and must not start with `0` to `9`. For example,
      # `foo_bar_17`.
      # 
      # Field names matching the regular expression `__.*__` are reserved. Reserved
      # field names are forbidden except in certain documented contexts. The map
      # keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be
      # empty.
      # 
      # Field paths may be used in other contexts to refer to structured fields
      # defined here. For `map_value`, the field path is represented by the simple
      # or quoted field names of the containing fields, delimited by `.`. For
      # example, the structured field
      # `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be
      # represented by the field path `foo.x&y`.
      # 
      # Within a field path, a quoted field name starts and ends with `` ` `` and
      # may contain any character. Some characters, including `` ` ``, must be
      # escaped using a `\`. For example, `` `x&y` `` represents `x&y` and
      # `` `bak\`tik` `` represents `` bak`tik ``.
    "a_key": { # A message that can hold any of the supported value types.
      "bytesValue": "A String", # A bytes value.
          #
          # Must not exceed 1 MiB - 89 bytes.
          # Only the first 1,500 bytes are considered by queries.
      "booleanValue": True or False, # A boolean value.
      "timestampValue": "A String", # A timestamp value.
          #
          # Precise only to microseconds. When stored, any additional precision is
          # rounded down.
      "referenceValue": "A String", # A reference to a document. For example:
          # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
      "doubleValue": 3.14, # A double value.
      "mapValue": { # A map value. # A map value.
        "fields": { # The map's fields.
            #
            # The map keys represent field names. Field names matching the regular
            # expression `__.*__` are reserved. Reserved field names are forbidden except
            # in certain documented contexts. The map keys, represented as UTF-8, must
            # not exceed 1,500 bytes and cannot be empty.
          "a_key": # Object with schema name: Value
        },
      },
      "stringValue": "A String", # A string value.
          #
          # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
          # Only the first 1,500 bytes of the UTF-8 representation are considered by
          # queries.
      "nullValue": "A String", # A null value.
      "arrayValue": { # An array value. # An array value.
          #
          # Cannot directly contain another array value, though can contain an
          # map which contains another array.
        "values": [ # Values in the array.
          # Object with schema name: Value
        ],
      },
      "integerValue": "A String", # An integer value.
      "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
          # of doubles representing degrees latitude and degrees longitude. Unless
          # specified otherwise, this must conform to the
          # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
          # standard</a>. Values must be within normalized ranges.
        "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
        "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
      },
    },
  },
  "updateTime": "A String", # Output only. The time at which the document was last changed.
      # 
      # This value is initially set to the `create_time` then increases
      # monotonically with each change to the document. It can also be
      # compared to values from other documents and the `read_time` of a query.
  "createTime": "A String", # Output only. The time at which the document was created.
      # 
      # This value increases monotonically when a document is deleted then
      # recreated. It can also be compared to values from other documents and
      # the `read_time` of a query.
  "name": "A String", # The resource name of the document, for example
      # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
}

  mask_fieldPaths: string, The list of field paths in the mask. See Document.fields for a field
path syntax reference. (repeated)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  documentId: string, The client-assigned document ID to use for this document.

Optional. If not specified, an ID will be assigned by the service.

Returns:
  An object of the form:

    { # A Firestore document.
      #
      # Must not exceed 1 MiB - 4 bytes.
    "fields": { # The document's fields.
        #
        # The map keys represent field names.
        #
        # A simple field name contains only characters `a` to `z`, `A` to `Z`,
        # `0` to `9`, or `_`, and must not start with `0` to `9`. For example,
        # `foo_bar_17`.
        #
        # Field names matching the regular expression `__.*__` are reserved. Reserved
        # field names are forbidden except in certain documented contexts. The map
        # keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be
        # empty.
        #
        # Field paths may be used in other contexts to refer to structured fields
        # defined here. For `map_value`, the field path is represented by the simple
        # or quoted field names of the containing fields, delimited by `.`. For
        # example, the structured field
        # `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be
        # represented by the field path `foo.x&y`.
        #
        # Within a field path, a quoted field name starts and ends with `` ` `` and
        # may contain any character. Some characters, including `` ` ``, must be
        # escaped using a `\`. For example, `` `x&y` `` represents `x&y` and
        # `` `bak\`tik` `` represents `` bak`tik ``.
      "a_key": { # A message that can hold any of the supported value types.
        "bytesValue": "A String", # A bytes value.
            #
            # Must not exceed 1 MiB - 89 bytes.
            # Only the first 1,500 bytes are considered by queries.
        "booleanValue": True or False, # A boolean value.
        "timestampValue": "A String", # A timestamp value.
            #
            # Precise only to microseconds. When stored, any additional precision is
            # rounded down.
        "referenceValue": "A String", # A reference to a document. For example:
            # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
        "doubleValue": 3.14, # A double value.
        "mapValue": { # A map value. # A map value.
          "fields": { # The map's fields.
              #
              # The map keys represent field names. Field names matching the regular
              # expression `__.*__` are reserved. Reserved field names are forbidden except
              # in certain documented contexts. The map keys, represented as UTF-8, must
              # not exceed 1,500 bytes and cannot be empty.
            "a_key": # Object with schema name: Value
          },
        },
        "stringValue": "A String", # A string value.
            #
            # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
            # Only the first 1,500 bytes of the UTF-8 representation are considered by
            # queries.
        "nullValue": "A String", # A null value.
        "arrayValue": { # An array value. # An array value.
            #
            # Cannot directly contain another array value, though can contain an
            # map which contains another array.
          "values": [ # Values in the array.
            # Object with schema name: Value
          ],
        },
        "integerValue": "A String", # An integer value.
        "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
            # of doubles representing degrees latitude and degrees longitude. Unless
            # specified otherwise, this must conform to the
            # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
            # standard</a>. Values must be within normalized ranges.
          "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
          "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
        },
      },
    },
    "updateTime": "A String", # Output only. The time at which the document was last changed.
        #
        # This value is initially set to the `create_time` then increases
        # monotonically with each change to the document. It can also be
        # compared to values from other documents and the `read_time` of a query.
    "createTime": "A String", # Output only. The time at which the document was created.
        #
        # This value increases monotonically when a document is deleted then
        # recreated. It can also be compared to values from other documents and
        # the `read_time` of a query.
    "name": "A String", # The resource name of the document, for example
        # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, currentDocument_updateTime=None, x__xgafv=None, currentDocument_exists=None)</code>
  <pre>Deletes a document.

Args:
  name: string, The resource name of the Document to delete. In the format:
`projects/{project_id}/databases/{database_id}/documents/{document_path}`. (required)
  currentDocument_updateTime: string, When set, the target document must exist and have been last updated at
that time.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  currentDocument_exists: boolean, When set to `true`, the target document must exist.
When set to `false`, the target document must not exist.

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, transaction=None, mask_fieldPaths=None, x__xgafv=None, readTime=None)</code>
  <pre>Gets a single document.

Args:
  name: string, The resource name of the Document to get. In the format:
`projects/{project_id}/databases/{database_id}/documents/{document_path}`. (required)
  transaction: string, Reads the document in a transaction.
  mask_fieldPaths: string, The list of field paths in the mask. See Document.fields for a field
path syntax reference. (repeated)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  readTime: string, Reads the version of the document at the given time.
This may not be older than 60 seconds.

Returns:
  An object of the form:

    { # A Firestore document.
      #
      # Must not exceed 1 MiB - 4 bytes.
    "fields": { # The document's fields.
        #
        # The map keys represent field names.
        #
        # A simple field name contains only characters `a` to `z`, `A` to `Z`,
        # `0` to `9`, or `_`, and must not start with `0` to `9`. For example,
        # `foo_bar_17`.
        #
        # Field names matching the regular expression `__.*__` are reserved. Reserved
        # field names are forbidden except in certain documented contexts. The map
        # keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be
        # empty.
        #
        # Field paths may be used in other contexts to refer to structured fields
        # defined here. For `map_value`, the field path is represented by the simple
        # or quoted field names of the containing fields, delimited by `.`. For
        # example, the structured field
        # `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be
        # represented by the field path `foo.x&y`.
        #
        # Within a field path, a quoted field name starts and ends with `` ` `` and
        # may contain any character. Some characters, including `` ` ``, must be
        # escaped using a `\`. For example, `` `x&y` `` represents `x&y` and
        # `` `bak\`tik` `` represents `` bak`tik ``.
      "a_key": { # A message that can hold any of the supported value types.
        "bytesValue": "A String", # A bytes value.
            #
            # Must not exceed 1 MiB - 89 bytes.
            # Only the first 1,500 bytes are considered by queries.
        "booleanValue": True or False, # A boolean value.
        "timestampValue": "A String", # A timestamp value.
            #
            # Precise only to microseconds. When stored, any additional precision is
            # rounded down.
        "referenceValue": "A String", # A reference to a document. For example:
            # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
        "doubleValue": 3.14, # A double value.
        "mapValue": { # A map value. # A map value.
          "fields": { # The map's fields.
              #
              # The map keys represent field names. Field names matching the regular
              # expression `__.*__` are reserved. Reserved field names are forbidden except
              # in certain documented contexts. The map keys, represented as UTF-8, must
              # not exceed 1,500 bytes and cannot be empty.
            "a_key": # Object with schema name: Value
          },
        },
        "stringValue": "A String", # A string value.
            #
            # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
            # Only the first 1,500 bytes of the UTF-8 representation are considered by
            # queries.
        "nullValue": "A String", # A null value.
        "arrayValue": { # An array value. # An array value.
            #
            # Cannot directly contain another array value, though can contain an
            # map which contains another array.
          "values": [ # Values in the array.
            # Object with schema name: Value
          ],
        },
        "integerValue": "A String", # An integer value.
        "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
            # of doubles representing degrees latitude and degrees longitude. Unless
            # specified otherwise, this must conform to the
            # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
            # standard</a>. Values must be within normalized ranges.
          "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
          "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
        },
      },
    },
    "updateTime": "A String", # Output only. The time at which the document was last changed.
        #
        # This value is initially set to the `create_time` then increases
        # monotonically with each change to the document. It can also be
        # compared to values from other documents and the `read_time` of a query.
    "createTime": "A String", # Output only. The time at which the document was created.
        #
        # This value increases monotonically when a document is deleted then
        # recreated. It can also be compared to values from other documents and
        # the `read_time` of a query.
    "name": "A String", # The resource name of the document, for example
        # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, collectionId, orderBy=None, showMissing=None, pageSize=None, mask_fieldPaths=None, x__xgafv=None, pageToken=None, readTime=None, transaction=None)</code>
  <pre>Lists documents.

Args:
  parent: string, The parent resource name. In the format:
`projects/{project_id}/databases/{database_id}/documents` or
`projects/{project_id}/databases/{database_id}/documents/{document_path}`.
For example:
`projects/my-project/databases/my-database/documents` or
`projects/my-project/databases/my-database/documents/chatrooms/my-chatroom` (required)
  collectionId: string, The collection ID, relative to `parent`, to list. For example: `chatrooms`
or `messages`. (required)
  orderBy: string, The order to sort results by. For example: `priority desc, name`.
  showMissing: boolean, If the list should show missing documents. A missing document is a
document that does not exist but has sub-documents. These documents will
be returned with a key but will not have fields, Document.create_time,
or Document.update_time set.

Requests with `show_missing` may not specify `where` or
`order_by`.
  pageSize: integer, The maximum number of documents to return.
  mask_fieldPaths: string, The list of field paths in the mask. See Document.fields for a field
path syntax reference. (repeated)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  pageToken: string, The `next_page_token` value returned from a previous List request, if any.
  readTime: string, Reads documents as they were at the given time.
This may not be older than 60 seconds.
  transaction: string, Reads documents in a transaction.

Returns:
  An object of the form:

    { # The response for Firestore.ListDocuments.
    "nextPageToken": "A String", # The next page token.
    "documents": [ # The Documents found.
      { # A Firestore document.
          #
          # Must not exceed 1 MiB - 4 bytes.
        "fields": { # The document's fields.
            #
            # The map keys represent field names.
            #
            # A simple field name contains only characters `a` to `z`, `A` to `Z`,
            # `0` to `9`, or `_`, and must not start with `0` to `9`. For example,
            # `foo_bar_17`.
            #
            # Field names matching the regular expression `__.*__` are reserved. Reserved
            # field names are forbidden except in certain documented contexts. The map
            # keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be
            # empty.
            #
            # Field paths may be used in other contexts to refer to structured fields
            # defined here. For `map_value`, the field path is represented by the simple
            # or quoted field names of the containing fields, delimited by `.`. For
            # example, the structured field
            # `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be
            # represented by the field path `foo.x&y`.
            #
            # Within a field path, a quoted field name starts and ends with `` ` `` and
            # may contain any character. Some characters, including `` ` ``, must be
            # escaped using a `\`. For example, `` `x&y` `` represents `x&y` and
            # `` `bak\`tik` `` represents `` bak`tik ``.
          "a_key": { # A message that can hold any of the supported value types.
            "bytesValue": "A String", # A bytes value.
                #
                # Must not exceed 1 MiB - 89 bytes.
                # Only the first 1,500 bytes are considered by queries.
            "booleanValue": True or False, # A boolean value.
            "timestampValue": "A String", # A timestamp value.
                #
                # Precise only to microseconds. When stored, any additional precision is
                # rounded down.
            "referenceValue": "A String", # A reference to a document. For example:
                # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
            "doubleValue": 3.14, # A double value.
            "mapValue": { # A map value. # A map value.
              "fields": { # The map's fields.
                  #
                  # The map keys represent field names. Field names matching the regular
                  # expression `__.*__` are reserved. Reserved field names are forbidden except
                  # in certain documented contexts. The map keys, represented as UTF-8, must
                  # not exceed 1,500 bytes and cannot be empty.
                "a_key": # Object with schema name: Value
              },
            },
            "stringValue": "A String", # A string value.
                #
                # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                # Only the first 1,500 bytes of the UTF-8 representation are considered by
                # queries.
            "nullValue": "A String", # A null value.
            "arrayValue": { # An array value. # An array value.
                #
                # Cannot directly contain another array value, though can contain an
                # map which contains another array.
              "values": [ # Values in the array.
                # Object with schema name: Value
              ],
            },
            "integerValue": "A String", # An integer value.
            "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                # of doubles representing degrees latitude and degrees longitude. Unless
                # specified otherwise, this must conform to the
                # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                # standard</a>. Values must be within normalized ranges.
              "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
              "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
            },
          },
        },
        "updateTime": "A String", # Output only. The time at which the document was last changed.
            #
            # This value is initially set to the `create_time` then increases
            # monotonically with each change to the document. It can also be
            # compared to values from other documents and the `read_time` of a query.
        "createTime": "A String", # Output only. The time at which the document was created.
            #
            # This value increases monotonically when a document is deleted then
            # recreated. It can also be compared to values from other documents and
            # the `read_time` of a query.
        "name": "A String", # The resource name of the document, for example
            # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="listCollectionIds">listCollectionIds(parent, body, x__xgafv=None)</code>
  <pre>Lists all the collection IDs underneath a document.

Args:
  parent: string, The parent document. In the format:
`projects/{project_id}/databases/{database_id}/documents/{document_path}`.
For example:
`projects/my-project/databases/my-database/documents/chatrooms/my-chatroom` (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request for Firestore.ListCollectionIds.
    "pageToken": "A String", # A page token. Must be a value from
        # ListCollectionIdsResponse.
    "pageSize": 42, # The maximum number of results to return.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response from Firestore.ListCollectionIds.
    "nextPageToken": "A String", # A page token that may be used to continue the list.
    "collectionIds": [ # The collection ids.
      "A String",
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="listCollectionIds_next">listCollectionIds_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="listen">listen(database, body, x__xgafv=None)</code>
  <pre>Listens to changes.

Args:
  database: string, The database name. In the format:
`projects/{project_id}/databases/{database_id}`. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A request for Firestore.Listen
    "labels": { # Labels associated with this target change.
      "a_key": "A String",
    },
    "addTarget": { # A specification of a set of documents to listen to. # A target to add to this stream.
      "documents": { # A target specified by a set of documents names. # A target specified by a set of document names.
        "documents": [ # The names of the documents to retrieve. In the format:
            # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
            # The request will fail if any of the document is not a child resource of
            # the given `database`. Duplicate names will be elided.
          "A String",
        ],
      },
      "resumeToken": "A String", # A resume token from a prior TargetChange for an identical target.
          #
          # Using a resume token with a different target is unsupported and may fail.
      "targetId": 42, # A client provided target ID.
          #
          # If not set, the server will assign an ID for the target.
          #
          # Used for resuming a target without changing IDs. The IDs can either be
          # client-assigned or be server-assigned in a previous stream. All targets
          # with client provided IDs must be added before adding a target that needs
          # a server-assigned id.
      "query": { # A target specified by a query. # A target specified by a query.
        "structuredQuery": { # A Firestore query. # A structured query.
          "orderBy": [ # The order to apply to the query results.
              #
              # Firestore guarantees a stable ordering through the following rules:
              #
              #  * Any field required to appear in `order_by`, that is not already
              #    specified in `order_by`, is appended to the order in field name order
              #    by default.
              #  * If an order on `__name__` is not specified, it is appended by default.
              #
              # Fields are appended with the same sort direction as the last order
              # specified, or 'ASCENDING' if no order was specified. For example:
              #
              #  * `SELECT * FROM Foo ORDER BY A` becomes
              #    `SELECT * FROM Foo ORDER BY A, __name__`
              #  * `SELECT * FROM Foo ORDER BY A DESC` becomes
              #    `SELECT * FROM Foo ORDER BY A DESC, __name__ DESC`
              #  * `SELECT * FROM Foo WHERE A > 1` becomes
              #    `SELECT * FROM Foo WHERE A > 1 ORDER BY A, __name__`
            { # An order on a field.
              "field": { # A reference to a field, such as `max(messages.time) as max_time`. # The field to order by.
                "fieldPath": "A String",
              },
              "direction": "A String", # The direction to order by. Defaults to `ASCENDING`.
            },
          ],
          "from": [ # The collections to query.
            { # A selection of a collection, such as `messages as m1`.
              "allDescendants": True or False, # When false, selects only collections that are immediate children of
                  # the `parent` specified in the containing `RunQueryRequest`.
                  # When true, selects all descendant collections.
              "collectionId": "A String", # The collection ID.
                  # When set, selects only collections with this ID.
            },
          ],
          "endAt": { # A position in a query result set. # A end point for the query results.
            "values": [ # The values that represent a position, in the order they appear in
                # the order by clause of a query.
                #
                # Can contain fewer values than specified in the order by clause.
              { # A message that can hold any of the supported value types.
                "bytesValue": "A String", # A bytes value.
                    #
                    # Must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes are considered by queries.
                "booleanValue": True or False, # A boolean value.
                "timestampValue": "A String", # A timestamp value.
                    #
                    # Precise only to microseconds. When stored, any additional precision is
                    # rounded down.
                "referenceValue": "A String", # A reference to a document. For example:
                    # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
                "doubleValue": 3.14, # A double value.
                "mapValue": { # A map value. # A map value.
                  "fields": { # The map's fields.
                      #
                      # The map keys represent field names. Field names matching the regular
                      # expression `__.*__` are reserved. Reserved field names are forbidden except
                      # in certain documented contexts. The map keys, represented as UTF-8, must
                      # not exceed 1,500 bytes and cannot be empty.
                    "a_key": # Object with schema name: Value
                  },
                },
                "stringValue": "A String", # A string value.
                    #
                    # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes of the UTF-8 representation are considered by
                    # queries.
                "nullValue": "A String", # A null value.
                "arrayValue": { # An array value. # An array value.
                    #
                    # Cannot directly contain another array value, though can contain an
                    # map which contains another array.
                  "values": [ # Values in the array.
                    # Object with schema name: Value
                  ],
                },
                "integerValue": "A String", # An integer value.
                "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                    # of doubles representing degrees latitude and degrees longitude. Unless
                    # specified otherwise, this must conform to the
                    # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                    # standard</a>. Values must be within normalized ranges.
                  "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                  "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
                },
              },
            ],
            "before": True or False, # If the position is just before or just after the given values, relative
                # to the sort order defined by the query.
          },
          "limit": 42, # The maximum number of results to return.
              #
              # Applies after all other constraints.
              # Must be >= 0 if specified.
          "offset": 42, # The number of results to skip.
              #
              # Applies before limit, but after all other constraints. Must be >= 0 if
              # specified.
          "startAt": { # A position in a query result set. # A starting point for the query results.
            "values": [ # The values that represent a position, in the order they appear in
                # the order by clause of a query.
                #
                # Can contain fewer values than specified in the order by clause.
              { # A message that can hold any of the supported value types.
                "bytesValue": "A String", # A bytes value.
                    #
                    # Must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes are considered by queries.
                "booleanValue": True or False, # A boolean value.
                "timestampValue": "A String", # A timestamp value.
                    #
                    # Precise only to microseconds. When stored, any additional precision is
                    # rounded down.
                "referenceValue": "A String", # A reference to a document. For example:
                    # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
                "doubleValue": 3.14, # A double value.
                "mapValue": { # A map value. # A map value.
                  "fields": { # The map's fields.
                      #
                      # The map keys represent field names. Field names matching the regular
                      # expression `__.*__` are reserved. Reserved field names are forbidden except
                      # in certain documented contexts. The map keys, represented as UTF-8, must
                      # not exceed 1,500 bytes and cannot be empty.
                    "a_key": # Object with schema name: Value
                  },
                },
                "stringValue": "A String", # A string value.
                    #
                    # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes of the UTF-8 representation are considered by
                    # queries.
                "nullValue": "A String", # A null value.
                "arrayValue": { # An array value. # An array value.
                    #
                    # Cannot directly contain another array value, though can contain an
                    # map which contains another array.
                  "values": [ # Values in the array.
                    # Object with schema name: Value
                  ],
                },
                "integerValue": "A String", # An integer value.
                "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                    # of doubles representing degrees latitude and degrees longitude. Unless
                    # specified otherwise, this must conform to the
                    # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                    # standard</a>. Values must be within normalized ranges.
                  "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                  "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
                },
              },
            ],
            "before": True or False, # If the position is just before or just after the given values, relative
                # to the sort order defined by the query.
          },
          "where": { # A filter. # The filter to apply.
            "unaryFilter": { # A filter with a single operand. # A filter that takes exactly one argument.
              "field": { # A reference to a field, such as `max(messages.time) as max_time`. # The field to which to apply the operator.
                "fieldPath": "A String",
              },
              "op": "A String", # The unary operator to apply.
            },
            "fieldFilter": { # A filter on a specific field. # A filter on a document field.
              "field": { # A reference to a field, such as `max(messages.time) as max_time`. # The field to filter by.
                "fieldPath": "A String",
              },
              "value": { # A message that can hold any of the supported value types. # The value to compare to.
                "bytesValue": "A String", # A bytes value.
                    #
                    # Must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes are considered by queries.
                "booleanValue": True or False, # A boolean value.
                "timestampValue": "A String", # A timestamp value.
                    #
                    # Precise only to microseconds. When stored, any additional precision is
                    # rounded down.
                "referenceValue": "A String", # A reference to a document. For example:
                    # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
                "doubleValue": 3.14, # A double value.
                "mapValue": { # A map value. # A map value.
                  "fields": { # The map's fields.
                      #
                      # The map keys represent field names. Field names matching the regular
                      # expression `__.*__` are reserved. Reserved field names are forbidden except
                      # in certain documented contexts. The map keys, represented as UTF-8, must
                      # not exceed 1,500 bytes and cannot be empty.
                    "a_key": # Object with schema name: Value
                  },
                },
                "stringValue": "A String", # A string value.
                    #
                    # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes of the UTF-8 representation are considered by
                    # queries.
                "nullValue": "A String", # A null value.
                "arrayValue": { # An array value. # An array value.
                    #
                    # Cannot directly contain another array value, though can contain an
                    # map which contains another array.
                  "values": [ # Values in the array.
                    # Object with schema name: Value
                  ],
                },
                "integerValue": "A String", # An integer value.
                "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                    # of doubles representing degrees latitude and degrees longitude. Unless
                    # specified otherwise, this must conform to the
                    # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                    # standard</a>. Values must be within normalized ranges.
                  "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                  "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
                },
              },
              "op": "A String", # The operator to filter by.
            },
            "compositeFilter": { # A filter that merges multiple other filters using the given operator. # A composite filter.
              "filters": [ # The list of filters to combine.
                  # Must contain at least one filter.
                # Object with schema name: Filter
              ],
              "op": "A String", # The operator for combining multiple filters.
            },
          },
          "select": { # The projection of document's fields to return. # The projection to return.
            "fields": [ # The fields to return.
                #
                # If empty, all fields are returned. To only return the name
                # of the document, use `['__name__']`.
              { # A reference to a field, such as `max(messages.time) as max_time`.
                "fieldPath": "A String",
              },
            ],
          },
        },
        "parent": "A String", # The parent resource name. In the format:
            # `projects/{project_id}/databases/{database_id}/documents` or
            # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
            # For example:
            # `projects/my-project/databases/my-database/documents` or
            # `projects/my-project/databases/my-database/documents/chatrooms/my-chatroom`
      },
      "once": True or False, # If the target should be removed once it is current and consistent.
      "readTime": "A String", # Start listening after a specific `read_time`.
          #
          # The client must know the state of matching documents at this time.
    },
    "removeTarget": 42, # The ID of a target to remove from this stream.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response for Firestore.Listen.
    "filter": { # A digest of all the documents that match a given target. # A filter to apply to the set of documents previously returned for the
        # given target.
        #
        # Returned when documents may have been removed from the given target, but
        # the exact documents are unknown.
      "count": 42, # The total count of documents that match target_id.
          #
          # If different from the count of documents in the client that match, the
          # client must manually determine which documents no longer match the target.
      "targetId": 42, # The target ID to which this filter applies.
    },
    "documentDelete": { # A Document has been deleted. # A Document has been deleted.
        #
        # May be the result of multiple writes, including updates, the
        # last of which deleted the Document.
        #
        # Multiple DocumentDelete messages may be returned for the same logical
        # delete, if multiple targets are affected.
      "removedTargetIds": [ # A set of target IDs for targets that previously matched this entity.
        42,
      ],
      "document": "A String", # The resource name of the Document that was deleted.
      "readTime": "A String", # The read timestamp at which the delete was observed.
          #
          # Greater or equal to the `commit_time` of the delete.
    },
    "documentChange": { # A Document has changed. # A Document has changed.
        #
        # May be the result of multiple writes, including deletes, that
        # ultimately resulted in a new value for the Document.
        #
        # Multiple DocumentChange messages may be returned for the same logical
        # change, if multiple targets are affected.
      "removedTargetIds": [ # A set of target IDs for targets that no longer match this document.
        42,
      ],
      "document": { # A Firestore document. # The new state of the Document.
          #
          # If `mask` is set, contains only fields that were updated or added.
          #
          # Must not exceed 1 MiB - 4 bytes.
        "fields": { # The document's fields.
            #
            # The map keys represent field names.
            #
            # A simple field name contains only characters `a` to `z`, `A` to `Z`,
            # `0` to `9`, or `_`, and must not start with `0` to `9`. For example,
            # `foo_bar_17`.
            #
            # Field names matching the regular expression `__.*__` are reserved. Reserved
            # field names are forbidden except in certain documented contexts. The map
            # keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be
            # empty.
            #
            # Field paths may be used in other contexts to refer to structured fields
            # defined here. For `map_value`, the field path is represented by the simple
            # or quoted field names of the containing fields, delimited by `.`. For
            # example, the structured field
            # `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be
            # represented by the field path `foo.x&y`.
            #
            # Within a field path, a quoted field name starts and ends with `` ` `` and
            # may contain any character. Some characters, including `` ` ``, must be
            # escaped using a `\`. For example, `` `x&y` `` represents `x&y` and
            # `` `bak\`tik` `` represents `` bak`tik ``.
          "a_key": { # A message that can hold any of the supported value types.
            "bytesValue": "A String", # A bytes value.
                #
                # Must not exceed 1 MiB - 89 bytes.
                # Only the first 1,500 bytes are considered by queries.
            "booleanValue": True or False, # A boolean value.
            "timestampValue": "A String", # A timestamp value.
                #
                # Precise only to microseconds. When stored, any additional precision is
                # rounded down.
            "referenceValue": "A String", # A reference to a document. For example:
                # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
            "doubleValue": 3.14, # A double value.
            "mapValue": { # A map value. # A map value.
              "fields": { # The map's fields.
                  #
                  # The map keys represent field names. Field names matching the regular
                  # expression `__.*__` are reserved. Reserved field names are forbidden except
                  # in certain documented contexts. The map keys, represented as UTF-8, must
                  # not exceed 1,500 bytes and cannot be empty.
                "a_key": # Object with schema name: Value
              },
            },
            "stringValue": "A String", # A string value.
                #
                # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                # Only the first 1,500 bytes of the UTF-8 representation are considered by
                # queries.
            "nullValue": "A String", # A null value.
            "arrayValue": { # An array value. # An array value.
                #
                # Cannot directly contain another array value, though can contain an
                # map which contains another array.
              "values": [ # Values in the array.
                # Object with schema name: Value
              ],
            },
            "integerValue": "A String", # An integer value.
            "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                # of doubles representing degrees latitude and degrees longitude. Unless
                # specified otherwise, this must conform to the
                # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                # standard</a>. Values must be within normalized ranges.
              "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
              "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
            },
          },
        },
        "updateTime": "A String", # Output only. The time at which the document was last changed.
            #
            # This value is initially set to the `create_time` then increases
            # monotonically with each change to the document. It can also be
            # compared to values from other documents and the `read_time` of a query.
        "createTime": "A String", # Output only. The time at which the document was created.
            #
            # This value increases monotonically when a document is deleted then
            # recreated. It can also be compared to values from other documents and
            # the `read_time` of a query.
        "name": "A String", # The resource name of the document, for example
            # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
      },
      "targetIds": [ # A set of target IDs of targets that match this document.
        42,
      ],
    },
    "documentRemove": { # A Document has been removed from the view of the targets. # A Document has been removed from a target (because it is no longer
        # relevant to that target).
        #
        # Sent if the document is no longer relevant to a target and is out of view.
        # Can be sent instead of a DocumentDelete or a DocumentChange if the server
        # can not send the new value of the document.
        #
        # Multiple DocumentRemove messages may be returned for the same logical
        # write or delete, if multiple targets are affected.
      "removedTargetIds": [ # A set of target IDs for targets that previously matched this document.
        42,
      ],
      "document": "A String", # The resource name of the Document that has gone out of view.
      "readTime": "A String", # The read timestamp at which the remove was observed.
          #
          # Greater or equal to the `commit_time` of the change/delete/remove.
    },
    "targetChange": { # Targets being watched have changed. # Targets have changed.
      "resumeToken": "A String", # A token that can be used to resume the stream for the given `target_ids`,
          # or all targets if `target_ids` is empty.
          #
          # Not set on every target change.
      "targetChangeType": "A String", # The type of change that occurred.
      "cause": { # The `Status` type defines a logical error model that is suitable for # The error that resulted in this change, if applicable.
          # different programming environments, including REST APIs and RPC APIs. It is
          # used by [gRPC](https://github.com/grpc). The error model is designed to be:
          #
          # - Simple to use and understand for most users
          # - Flexible enough to meet unexpected needs
          #
          # # Overview
          #
          # The `Status` message contains three pieces of data: error code, error
          # message, and error details. The error code should be an enum value of
          # google.rpc.Code, but it may accept additional error codes if needed.  The
          # error message should be a developer-facing English message that helps
          # developers *understand* and *resolve* the error. If a localized user-facing
          # error message is needed, put the localized message in the error details or
          # localize it in the client. The optional error details may contain arbitrary
          # information about the error. There is a predefined set of error detail types
          # in the package `google.rpc` that can be used for common error conditions.
          #
          # # Language mapping
          #
          # The `Status` message is the logical representation of the error model, but it
          # is not necessarily the actual wire format. When the `Status` message is
          # exposed in different client libraries and different wire protocols, it can be
          # mapped differently. For example, it will likely be mapped to some exceptions
          # in Java, but more likely mapped to some error codes in C.
          #
          # # Other uses
          #
          # The error model and the `Status` message can be used in a variety of
          # environments, either with or without APIs, to provide a
          # consistent developer experience across different environments.
          #
          # Example uses of this error model include:
          #
          # - Partial errors. If a service needs to return partial errors to the client,
          #     it may embed the `Status` in the normal response to indicate the partial
          #     errors.
          #
          # - Workflow errors. A typical workflow has multiple steps. Each step may
          #     have a `Status` message for error reporting.
          #
          # - Batch operations. If a client uses batch request and batch response, the
          #     `Status` message should be used directly inside batch response, one for
          #     each error sub-response.
          #
          # - Asynchronous operations. If an API call embeds asynchronous operation
          #     results in its response, the status of those operations should be
          #     represented directly using the `Status` message.
          #
          # - Logging. If some API errors are stored in logs, the message `Status` could
          #     be used directly after any stripping needed for security/privacy reasons.
        "message": "A String", # A developer-facing error message, which should be in English. Any
            # user-facing error message should be localized and sent in the
            # google.rpc.Status.details field, or localized by the client.
        "code": 42, # The status code, which should be an enum value of google.rpc.Code.
        "details": [ # A list of messages that carry the error details.  There is a common set of
            # message types for APIs to use.
          {
            "a_key": "", # Properties of the object. Contains field @type with type URL.
          },
        ],
      },
      "targetIds": [ # The target IDs of targets that have changed.
          #
          # If empty, the change applies to all targets.
          #
          # For `target_change_type=ADD`, the order of the target IDs matches the order
          # of the requests to add the targets. This allows clients to unambiguously
          # associate server-assigned target IDs with added targets.
          #
          # For other states, the order of the target IDs is not defined.
        42,
      ],
      "readTime": "A String", # The consistent `read_time` for the given `target_ids` (omitted when the
          # target_ids are not at a consistent snapshot).
          #
          # The stream is guaranteed to send a `read_time` with `target_ids` empty
          # whenever the entire stream reaches a new consistent snapshot. ADD,
          # CURRENT, and RESET messages are guaranteed to (eventually) result in a
          # new consistent snapshot (while NO_CHANGE and REMOVE messages are not).
          #
          # For a given stream, `read_time` is guaranteed to be monotonically
          # increasing.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body, updateMask_fieldPaths=None, mask_fieldPaths=None, x__xgafv=None, currentDocument_updateTime=None, currentDocument_exists=None)</code>
  <pre>Updates or inserts a document.

Args:
  name: string, The resource name of the document, for example
`projects/{project_id}/databases/{database_id}/documents/{document_path}`. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A Firestore document.
    # 
    # Must not exceed 1 MiB - 4 bytes.
  "fields": { # The document's fields.
      # 
      # The map keys represent field names.
      # 
      # A simple field name contains only characters `a` to `z`, `A` to `Z`,
      # `0` to `9`, or `_`, and must not start with `0` to `9`. For example,
      # `foo_bar_17`.
      # 
      # Field names matching the regular expression `__.*__` are reserved. Reserved
      # field names are forbidden except in certain documented contexts. The map
      # keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be
      # empty.
      # 
      # Field paths may be used in other contexts to refer to structured fields
      # defined here. For `map_value`, the field path is represented by the simple
      # or quoted field names of the containing fields, delimited by `.`. For
      # example, the structured field
      # `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be
      # represented by the field path `foo.x&y`.
      # 
      # Within a field path, a quoted field name starts and ends with `` ` `` and
      # may contain any character. Some characters, including `` ` ``, must be
      # escaped using a `\`. For example, `` `x&y` `` represents `x&y` and
      # `` `bak\`tik` `` represents `` bak`tik ``.
    "a_key": { # A message that can hold any of the supported value types.
      "bytesValue": "A String", # A bytes value.
          #
          # Must not exceed 1 MiB - 89 bytes.
          # Only the first 1,500 bytes are considered by queries.
      "booleanValue": True or False, # A boolean value.
      "timestampValue": "A String", # A timestamp value.
          #
          # Precise only to microseconds. When stored, any additional precision is
          # rounded down.
      "referenceValue": "A String", # A reference to a document. For example:
          # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
      "doubleValue": 3.14, # A double value.
      "mapValue": { # A map value. # A map value.
        "fields": { # The map's fields.
            #
            # The map keys represent field names. Field names matching the regular
            # expression `__.*__` are reserved. Reserved field names are forbidden except
            # in certain documented contexts. The map keys, represented as UTF-8, must
            # not exceed 1,500 bytes and cannot be empty.
          "a_key": # Object with schema name: Value
        },
      },
      "stringValue": "A String", # A string value.
          #
          # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
          # Only the first 1,500 bytes of the UTF-8 representation are considered by
          # queries.
      "nullValue": "A String", # A null value.
      "arrayValue": { # An array value. # An array value.
          #
          # Cannot directly contain another array value, though can contain an
          # map which contains another array.
        "values": [ # Values in the array.
          # Object with schema name: Value
        ],
      },
      "integerValue": "A String", # An integer value.
      "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
          # of doubles representing degrees latitude and degrees longitude. Unless
          # specified otherwise, this must conform to the
          # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
          # standard</a>. Values must be within normalized ranges.
        "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
        "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
      },
    },
  },
  "updateTime": "A String", # Output only. The time at which the document was last changed.
      # 
      # This value is initially set to the `create_time` then increases
      # monotonically with each change to the document. It can also be
      # compared to values from other documents and the `read_time` of a query.
  "createTime": "A String", # Output only. The time at which the document was created.
      # 
      # This value increases monotonically when a document is deleted then
      # recreated. It can also be compared to values from other documents and
      # the `read_time` of a query.
  "name": "A String", # The resource name of the document, for example
      # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
}

  updateMask_fieldPaths: string, The list of field paths in the mask. See Document.fields for a field
path syntax reference. (repeated)
  mask_fieldPaths: string, The list of field paths in the mask. See Document.fields for a field
path syntax reference. (repeated)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  currentDocument_updateTime: string, When set, the target document must exist and have been last updated at
that time.
  currentDocument_exists: boolean, When set to `true`, the target document must exist.
When set to `false`, the target document must not exist.

Returns:
  An object of the form:

    { # A Firestore document.
      #
      # Must not exceed 1 MiB - 4 bytes.
    "fields": { # The document's fields.
        #
        # The map keys represent field names.
        #
        # A simple field name contains only characters `a` to `z`, `A` to `Z`,
        # `0` to `9`, or `_`, and must not start with `0` to `9`. For example,
        # `foo_bar_17`.
        #
        # Field names matching the regular expression `__.*__` are reserved. Reserved
        # field names are forbidden except in certain documented contexts. The map
        # keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be
        # empty.
        #
        # Field paths may be used in other contexts to refer to structured fields
        # defined here. For `map_value`, the field path is represented by the simple
        # or quoted field names of the containing fields, delimited by `.`. For
        # example, the structured field
        # `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be
        # represented by the field path `foo.x&y`.
        #
        # Within a field path, a quoted field name starts and ends with `` ` `` and
        # may contain any character. Some characters, including `` ` ``, must be
        # escaped using a `\`. For example, `` `x&y` `` represents `x&y` and
        # `` `bak\`tik` `` represents `` bak`tik ``.
      "a_key": { # A message that can hold any of the supported value types.
        "bytesValue": "A String", # A bytes value.
            #
            # Must not exceed 1 MiB - 89 bytes.
            # Only the first 1,500 bytes are considered by queries.
        "booleanValue": True or False, # A boolean value.
        "timestampValue": "A String", # A timestamp value.
            #
            # Precise only to microseconds. When stored, any additional precision is
            # rounded down.
        "referenceValue": "A String", # A reference to a document. For example:
            # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
        "doubleValue": 3.14, # A double value.
        "mapValue": { # A map value. # A map value.
          "fields": { # The map's fields.
              #
              # The map keys represent field names. Field names matching the regular
              # expression `__.*__` are reserved. Reserved field names are forbidden except
              # in certain documented contexts. The map keys, represented as UTF-8, must
              # not exceed 1,500 bytes and cannot be empty.
            "a_key": # Object with schema name: Value
          },
        },
        "stringValue": "A String", # A string value.
            #
            # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
            # Only the first 1,500 bytes of the UTF-8 representation are considered by
            # queries.
        "nullValue": "A String", # A null value.
        "arrayValue": { # An array value. # An array value.
            #
            # Cannot directly contain another array value, though can contain an
            # map which contains another array.
          "values": [ # Values in the array.
            # Object with schema name: Value
          ],
        },
        "integerValue": "A String", # An integer value.
        "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
            # of doubles representing degrees latitude and degrees longitude. Unless
            # specified otherwise, this must conform to the
            # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
            # standard</a>. Values must be within normalized ranges.
          "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
          "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
        },
      },
    },
    "updateTime": "A String", # Output only. The time at which the document was last changed.
        #
        # This value is initially set to the `create_time` then increases
        # monotonically with each change to the document. It can also be
        # compared to values from other documents and the `read_time` of a query.
    "createTime": "A String", # Output only. The time at which the document was created.
        #
        # This value increases monotonically when a document is deleted then
        # recreated. It can also be compared to values from other documents and
        # the `read_time` of a query.
    "name": "A String", # The resource name of the document, for example
        # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="rollback">rollback(database, body, x__xgafv=None)</code>
  <pre>Rolls back a transaction.

Args:
  database: string, The database name. In the format:
`projects/{project_id}/databases/{database_id}`. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request for Firestore.Rollback.
    "transaction": "A String", # The transaction to roll back.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="runQuery">runQuery(parent, body, x__xgafv=None)</code>
  <pre>Runs a query.

Args:
  parent: string, The parent resource name. In the format:
`projects/{project_id}/databases/{database_id}/documents` or
`projects/{project_id}/databases/{database_id}/documents/{document_path}`.
For example:
`projects/my-project/databases/my-database/documents` or
`projects/my-project/databases/my-database/documents/chatrooms/my-chatroom` (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request for Firestore.RunQuery.
    "newTransaction": { # Options for creating a new transaction. # Starts a new transaction and reads the documents.
        # Defaults to a read-only transaction.
        # The new transaction ID will be returned as the first response in the
        # stream.
      "readWrite": { # Options for a transaction that can be used to read and write documents. # The transaction can be used for both read and write operations.
        "retryTransaction": "A String", # An optional transaction to retry.
      },
      "readOnly": { # Options for a transaction that can only be used to read documents. # The transaction can only be used for read operations.
        "readTime": "A String", # Reads documents at the given time.
            # This may not be older than 60 seconds.
      },
    },
    "transaction": "A String", # Reads documents in a transaction.
    "structuredQuery": { # A Firestore query. # A structured query.
      "orderBy": [ # The order to apply to the query results.
          #
          # Firestore guarantees a stable ordering through the following rules:
          #
          #  * Any field required to appear in `order_by`, that is not already
          #    specified in `order_by`, is appended to the order in field name order
          #    by default.
          #  * If an order on `__name__` is not specified, it is appended by default.
          #
          # Fields are appended with the same sort direction as the last order
          # specified, or 'ASCENDING' if no order was specified. For example:
          #
          #  * `SELECT * FROM Foo ORDER BY A` becomes
          #    `SELECT * FROM Foo ORDER BY A, __name__`
          #  * `SELECT * FROM Foo ORDER BY A DESC` becomes
          #    `SELECT * FROM Foo ORDER BY A DESC, __name__ DESC`
          #  * `SELECT * FROM Foo WHERE A > 1` becomes
          #    `SELECT * FROM Foo WHERE A > 1 ORDER BY A, __name__`
        { # An order on a field.
          "field": { # A reference to a field, such as `max(messages.time) as max_time`. # The field to order by.
            "fieldPath": "A String",
          },
          "direction": "A String", # The direction to order by. Defaults to `ASCENDING`.
        },
      ],
      "from": [ # The collections to query.
        { # A selection of a collection, such as `messages as m1`.
          "allDescendants": True or False, # When false, selects only collections that are immediate children of
              # the `parent` specified in the containing `RunQueryRequest`.
              # When true, selects all descendant collections.
          "collectionId": "A String", # The collection ID.
              # When set, selects only collections with this ID.
        },
      ],
      "endAt": { # A position in a query result set. # A end point for the query results.
        "values": [ # The values that represent a position, in the order they appear in
            # the order by clause of a query.
            #
            # Can contain fewer values than specified in the order by clause.
          { # A message that can hold any of the supported value types.
            "bytesValue": "A String", # A bytes value.
                #
                # Must not exceed 1 MiB - 89 bytes.
                # Only the first 1,500 bytes are considered by queries.
            "booleanValue": True or False, # A boolean value.
            "timestampValue": "A String", # A timestamp value.
                #
                # Precise only to microseconds. When stored, any additional precision is
                # rounded down.
            "referenceValue": "A String", # A reference to a document. For example:
                # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
            "doubleValue": 3.14, # A double value.
            "mapValue": { # A map value. # A map value.
              "fields": { # The map's fields.
                  #
                  # The map keys represent field names. Field names matching the regular
                  # expression `__.*__` are reserved. Reserved field names are forbidden except
                  # in certain documented contexts. The map keys, represented as UTF-8, must
                  # not exceed 1,500 bytes and cannot be empty.
                "a_key": # Object with schema name: Value
              },
            },
            "stringValue": "A String", # A string value.
                #
                # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                # Only the first 1,500 bytes of the UTF-8 representation are considered by
                # queries.
            "nullValue": "A String", # A null value.
            "arrayValue": { # An array value. # An array value.
                #
                # Cannot directly contain another array value, though can contain an
                # map which contains another array.
              "values": [ # Values in the array.
                # Object with schema name: Value
              ],
            },
            "integerValue": "A String", # An integer value.
            "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                # of doubles representing degrees latitude and degrees longitude. Unless
                # specified otherwise, this must conform to the
                # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                # standard</a>. Values must be within normalized ranges.
              "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
              "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
            },
          },
        ],
        "before": True or False, # If the position is just before or just after the given values, relative
            # to the sort order defined by the query.
      },
      "limit": 42, # The maximum number of results to return.
          #
          # Applies after all other constraints.
          # Must be >= 0 if specified.
      "offset": 42, # The number of results to skip.
          #
          # Applies before limit, but after all other constraints. Must be >= 0 if
          # specified.
      "startAt": { # A position in a query result set. # A starting point for the query results.
        "values": [ # The values that represent a position, in the order they appear in
            # the order by clause of a query.
            #
            # Can contain fewer values than specified in the order by clause.
          { # A message that can hold any of the supported value types.
            "bytesValue": "A String", # A bytes value.
                #
                # Must not exceed 1 MiB - 89 bytes.
                # Only the first 1,500 bytes are considered by queries.
            "booleanValue": True or False, # A boolean value.
            "timestampValue": "A String", # A timestamp value.
                #
                # Precise only to microseconds. When stored, any additional precision is
                # rounded down.
            "referenceValue": "A String", # A reference to a document. For example:
                # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
            "doubleValue": 3.14, # A double value.
            "mapValue": { # A map value. # A map value.
              "fields": { # The map's fields.
                  #
                  # The map keys represent field names. Field names matching the regular
                  # expression `__.*__` are reserved. Reserved field names are forbidden except
                  # in certain documented contexts. The map keys, represented as UTF-8, must
                  # not exceed 1,500 bytes and cannot be empty.
                "a_key": # Object with schema name: Value
              },
            },
            "stringValue": "A String", # A string value.
                #
                # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                # Only the first 1,500 bytes of the UTF-8 representation are considered by
                # queries.
            "nullValue": "A String", # A null value.
            "arrayValue": { # An array value. # An array value.
                #
                # Cannot directly contain another array value, though can contain an
                # map which contains another array.
              "values": [ # Values in the array.
                # Object with schema name: Value
              ],
            },
            "integerValue": "A String", # An integer value.
            "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                # of doubles representing degrees latitude and degrees longitude. Unless
                # specified otherwise, this must conform to the
                # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                # standard</a>. Values must be within normalized ranges.
              "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
              "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
            },
          },
        ],
        "before": True or False, # If the position is just before or just after the given values, relative
            # to the sort order defined by the query.
      },
      "where": { # A filter. # The filter to apply.
        "unaryFilter": { # A filter with a single operand. # A filter that takes exactly one argument.
          "field": { # A reference to a field, such as `max(messages.time) as max_time`. # The field to which to apply the operator.
            "fieldPath": "A String",
          },
          "op": "A String", # The unary operator to apply.
        },
        "fieldFilter": { # A filter on a specific field. # A filter on a document field.
          "field": { # A reference to a field, such as `max(messages.time) as max_time`. # The field to filter by.
            "fieldPath": "A String",
          },
          "value": { # A message that can hold any of the supported value types. # The value to compare to.
            "bytesValue": "A String", # A bytes value.
                #
                # Must not exceed 1 MiB - 89 bytes.
                # Only the first 1,500 bytes are considered by queries.
            "booleanValue": True or False, # A boolean value.
            "timestampValue": "A String", # A timestamp value.
                #
                # Precise only to microseconds. When stored, any additional precision is
                # rounded down.
            "referenceValue": "A String", # A reference to a document. For example:
                # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
            "doubleValue": 3.14, # A double value.
            "mapValue": { # A map value. # A map value.
              "fields": { # The map's fields.
                  #
                  # The map keys represent field names. Field names matching the regular
                  # expression `__.*__` are reserved. Reserved field names are forbidden except
                  # in certain documented contexts. The map keys, represented as UTF-8, must
                  # not exceed 1,500 bytes and cannot be empty.
                "a_key": # Object with schema name: Value
              },
            },
            "stringValue": "A String", # A string value.
                #
                # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                # Only the first 1,500 bytes of the UTF-8 representation are considered by
                # queries.
            "nullValue": "A String", # A null value.
            "arrayValue": { # An array value. # An array value.
                #
                # Cannot directly contain another array value, though can contain an
                # map which contains another array.
              "values": [ # Values in the array.
                # Object with schema name: Value
              ],
            },
            "integerValue": "A String", # An integer value.
            "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                # of doubles representing degrees latitude and degrees longitude. Unless
                # specified otherwise, this must conform to the
                # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                # standard</a>. Values must be within normalized ranges.
              "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
              "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
            },
          },
          "op": "A String", # The operator to filter by.
        },
        "compositeFilter": { # A filter that merges multiple other filters using the given operator. # A composite filter.
          "filters": [ # The list of filters to combine.
              # Must contain at least one filter.
            # Object with schema name: Filter
          ],
          "op": "A String", # The operator for combining multiple filters.
        },
      },
      "select": { # The projection of document's fields to return. # The projection to return.
        "fields": [ # The fields to return.
            #
            # If empty, all fields are returned. To only return the name
            # of the document, use `['__name__']`.
          { # A reference to a field, such as `max(messages.time) as max_time`.
            "fieldPath": "A String",
          },
        ],
      },
    },
    "readTime": "A String", # Reads documents as they were at the given time.
        # This may not be older than 60 seconds.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response for Firestore.RunQuery.
    "skippedResults": 42, # The number of results that have been skipped due to an offset between
        # the last response and the current response.
    "transaction": "A String", # The transaction that was started as part of this request.
        # Can only be set in the first response, and only if
        # RunQueryRequest.new_transaction was set in the request.
        # If set, no other fields will be set in this response.
    "document": { # A Firestore document. # A query result.
        # Not set when reporting partial progress.
        #
        # Must not exceed 1 MiB - 4 bytes.
      "fields": { # The document's fields.
          #
          # The map keys represent field names.
          #
          # A simple field name contains only characters `a` to `z`, `A` to `Z`,
          # `0` to `9`, or `_`, and must not start with `0` to `9`. For example,
          # `foo_bar_17`.
          #
          # Field names matching the regular expression `__.*__` are reserved. Reserved
          # field names are forbidden except in certain documented contexts. The map
          # keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be
          # empty.
          #
          # Field paths may be used in other contexts to refer to structured fields
          # defined here. For `map_value`, the field path is represented by the simple
          # or quoted field names of the containing fields, delimited by `.`. For
          # example, the structured field
          # `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be
          # represented by the field path `foo.x&y`.
          #
          # Within a field path, a quoted field name starts and ends with `` ` `` and
          # may contain any character. Some characters, including `` ` ``, must be
          # escaped using a `\`. For example, `` `x&y` `` represents `x&y` and
          # `` `bak\`tik` `` represents `` bak`tik ``.
        "a_key": { # A message that can hold any of the supported value types.
          "bytesValue": "A String", # A bytes value.
              #
              # Must not exceed 1 MiB - 89 bytes.
              # Only the first 1,500 bytes are considered by queries.
          "booleanValue": True or False, # A boolean value.
          "timestampValue": "A String", # A timestamp value.
              #
              # Precise only to microseconds. When stored, any additional precision is
              # rounded down.
          "referenceValue": "A String", # A reference to a document. For example:
              # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
          "doubleValue": 3.14, # A double value.
          "mapValue": { # A map value. # A map value.
            "fields": { # The map's fields.
                #
                # The map keys represent field names. Field names matching the regular
                # expression `__.*__` are reserved. Reserved field names are forbidden except
                # in certain documented contexts. The map keys, represented as UTF-8, must
                # not exceed 1,500 bytes and cannot be empty.
              "a_key": # Object with schema name: Value
            },
          },
          "stringValue": "A String", # A string value.
              #
              # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
              # Only the first 1,500 bytes of the UTF-8 representation are considered by
              # queries.
          "nullValue": "A String", # A null value.
          "arrayValue": { # An array value. # An array value.
              #
              # Cannot directly contain another array value, though can contain an
              # map which contains another array.
            "values": [ # Values in the array.
              # Object with schema name: Value
            ],
          },
          "integerValue": "A String", # An integer value.
          "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
              # of doubles representing degrees latitude and degrees longitude. Unless
              # specified otherwise, this must conform to the
              # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
              # standard</a>. Values must be within normalized ranges.
            "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
            "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
          },
        },
      },
      "updateTime": "A String", # Output only. The time at which the document was last changed.
          #
          # This value is initially set to the `create_time` then increases
          # monotonically with each change to the document. It can also be
          # compared to values from other documents and the `read_time` of a query.
      "createTime": "A String", # Output only. The time at which the document was created.
          #
          # This value increases monotonically when a document is deleted then
          # recreated. It can also be compared to values from other documents and
          # the `read_time` of a query.
      "name": "A String", # The resource name of the document, for example
          # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
    },
    "readTime": "A String", # The time at which the document was read. This may be monotonically
        # increasing; in this case, the previous documents in the result stream are
        # guaranteed not to have changed between their `read_time` and this one.
        #
        # If the query returns no results, a response with `read_time` and no
        # `document` will be sent, and this represents the time at which the query
        # was run.
  }</pre>
</div>

<div class="method">
    <code class="details" id="write">write(database, body, x__xgafv=None)</code>
  <pre>Streams batches of document updates and deletes, in order.

Args:
  database: string, The database name. In the format:
`projects/{project_id}/databases/{database_id}`.
This is only required in the first message. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # The request for Firestore.Write.
      # 
      # The first request creates a stream, or resumes an existing one from a token.
      # 
      # When creating a new stream, the server replies with a response containing
      # only an ID and a token, to use in the next request.
      # 
      # When resuming a stream, the server first streams any responses later than the
      # given token, then a response containing only an up-to-date token, to use in
      # the next request.
    "writes": [ # The writes to apply.
        # 
        # Always executed atomically and in order.
        # This must be empty on the first request.
        # This may be empty on the last request.
        # This must not be empty on all other requests.
      { # A write on a document.
        "delete": "A String", # A document name to delete. In the format:
            # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
        "updateMask": { # A set of field paths on a document. # The fields to update in this write.
            #
            # This field can be set only when the operation is `update`.
            # If the mask is not set for an `update` and the document exists, any
            # existing data will be overwritten.
            # If the mask is set and the document on the server has fields not covered by
            # the mask, they are left unchanged.
            # Fields referenced in the mask, but not present in the input document, are
            # deleted from the document on the server.
            # The field paths in this mask must not contain a reserved field name.
            # Used to restrict a get or update operation on a document to a subset of its
            # fields.
            # This is different from standard field masks, as this is always scoped to a
            # Document, and takes in account the dynamic nature of Value.
          "fieldPaths": [ # The list of field paths in the mask. See Document.fields for a field
              # path syntax reference.
            "A String",
          ],
        },
        "update": { # A Firestore document. # A document to write.
            #
            # Must not exceed 1 MiB - 4 bytes.
          "fields": { # The document's fields.
              #
              # The map keys represent field names.
              #
              # A simple field name contains only characters `a` to `z`, `A` to `Z`,
              # `0` to `9`, or `_`, and must not start with `0` to `9`. For example,
              # `foo_bar_17`.
              #
              # Field names matching the regular expression `__.*__` are reserved. Reserved
              # field names are forbidden except in certain documented contexts. The map
              # keys, represented as UTF-8, must not exceed 1,500 bytes and cannot be
              # empty.
              #
              # Field paths may be used in other contexts to refer to structured fields
              # defined here. For `map_value`, the field path is represented by the simple
              # or quoted field names of the containing fields, delimited by `.`. For
              # example, the structured field
              # `"foo" : { map_value: { "x&y" : { string_value: "hello" }}}` would be
              # represented by the field path `foo.x&y`.
              #
              # Within a field path, a quoted field name starts and ends with `` ` `` and
              # may contain any character. Some characters, including `` ` ``, must be
              # escaped using a `\`. For example, `` `x&y` `` represents `x&y` and
              # `` `bak\`tik` `` represents `` bak`tik ``.
            "a_key": { # A message that can hold any of the supported value types.
              "bytesValue": "A String", # A bytes value.
                  #
                  # Must not exceed 1 MiB - 89 bytes.
                  # Only the first 1,500 bytes are considered by queries.
              "booleanValue": True or False, # A boolean value.
              "timestampValue": "A String", # A timestamp value.
                  #
                  # Precise only to microseconds. When stored, any additional precision is
                  # rounded down.
              "referenceValue": "A String", # A reference to a document. For example:
                  # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
              "doubleValue": 3.14, # A double value.
              "mapValue": { # A map value. # A map value.
                "fields": { # The map's fields.
                    #
                    # The map keys represent field names. Field names matching the regular
                    # expression `__.*__` are reserved. Reserved field names are forbidden except
                    # in certain documented contexts. The map keys, represented as UTF-8, must
                    # not exceed 1,500 bytes and cannot be empty.
                  "a_key": # Object with schema name: Value
                },
              },
              "stringValue": "A String", # A string value.
                  #
                  # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                  # Only the first 1,500 bytes of the UTF-8 representation are considered by
                  # queries.
              "nullValue": "A String", # A null value.
              "arrayValue": { # An array value. # An array value.
                  #
                  # Cannot directly contain another array value, though can contain an
                  # map which contains another array.
                "values": [ # Values in the array.
                  # Object with schema name: Value
                ],
              },
              "integerValue": "A String", # An integer value.
              "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                  # of doubles representing degrees latitude and degrees longitude. Unless
                  # specified otherwise, this must conform to the
                  # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                  # standard</a>. Values must be within normalized ranges.
                "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
              },
            },
          },
          "updateTime": "A String", # Output only. The time at which the document was last changed.
              #
              # This value is initially set to the `create_time` then increases
              # monotonically with each change to the document. It can also be
              # compared to values from other documents and the `read_time` of a query.
          "createTime": "A String", # Output only. The time at which the document was created.
              #
              # This value increases monotonically when a document is deleted then
              # recreated. It can also be compared to values from other documents and
              # the `read_time` of a query.
          "name": "A String", # The resource name of the document, for example
              # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
        },
        "currentDocument": { # A precondition on a document, used for conditional operations. # An optional precondition on the document.
            #
            # The write will fail if this is set and not met by the target document.
          "updateTime": "A String", # When set, the target document must exist and have been last updated at
              # that time.
          "exists": True or False, # When set to `true`, the target document must exist.
              # When set to `false`, the target document must not exist.
        },
        "transform": { # A transformation of a document. # Applies a transformation to a document.
            # At most one `transform` per document is allowed in a given request.
            # An `update` cannot follow a `transform` on the same document in a given
            # request.
          "document": "A String", # The name of the document to transform.
          "fieldTransforms": [ # The list of transformations to apply to the fields of the document, in
              # order.
              # This must not be empty.
            { # A transformation of a field of the document.
              "setToServerValue": "A String", # Sets the field to the given server value.
              "maximum": { # A message that can hold any of the supported value types. # Sets the field to the maximum of its current value and the given value.
                  #
                  # This must be an integer or a double value.
                  # If the field is not an integer or double, or if the field does not yet
                  # exist, the transformation will set the field to the given value.
                  # If a maximum operation is applied where the field and the input value
                  # are of mixed types (that is - one is an integer and one is a double)
                  # the field takes on the type of the larger operand. If the operands are
                  # equivalent (e.g. 3 and 3.0), the field does not change.
                  # 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
                  # zero input value is always the stored value.
                  # The maximum of any numeric value x and NaN is NaN.
                "bytesValue": "A String", # A bytes value.
                    #
                    # Must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes are considered by queries.
                "booleanValue": True or False, # A boolean value.
                "timestampValue": "A String", # A timestamp value.
                    #
                    # Precise only to microseconds. When stored, any additional precision is
                    # rounded down.
                "referenceValue": "A String", # A reference to a document. For example:
                    # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
                "doubleValue": 3.14, # A double value.
                "mapValue": { # A map value. # A map value.
                  "fields": { # The map's fields.
                      #
                      # The map keys represent field names. Field names matching the regular
                      # expression `__.*__` are reserved. Reserved field names are forbidden except
                      # in certain documented contexts. The map keys, represented as UTF-8, must
                      # not exceed 1,500 bytes and cannot be empty.
                    "a_key": # Object with schema name: Value
                  },
                },
                "stringValue": "A String", # A string value.
                    #
                    # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes of the UTF-8 representation are considered by
                    # queries.
                "nullValue": "A String", # A null value.
                "arrayValue": { # An array value. # An array value.
                    #
                    # Cannot directly contain another array value, though can contain an
                    # map which contains another array.
                  "values": [ # Values in the array.
                    # Object with schema name: Value
                  ],
                },
                "integerValue": "A String", # An integer value.
                "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                    # of doubles representing degrees latitude and degrees longitude. Unless
                    # specified otherwise, this must conform to the
                    # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                    # standard</a>. Values must be within normalized ranges.
                  "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                  "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
                },
              },
              "increment": { # A message that can hold any of the supported value types. # Adds the given value to the field's current value.
                  #
                  # This must be an integer or a double value.
                  # If the field is not an integer or double, or if the field does not yet
                  # exist, the transformation will set the field to the given value.
                  # If either of the given value or the current field value are doubles,
                  # both values will be interpreted as doubles. Double arithmetic and
                  # representation of double values follow IEEE 754 semantics.
                  # If there is positive/negative integer overflow, the field is resolved
                  # to the largest magnitude positive/negative integer.
                "bytesValue": "A String", # A bytes value.
                    #
                    # Must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes are considered by queries.
                "booleanValue": True or False, # A boolean value.
                "timestampValue": "A String", # A timestamp value.
                    #
                    # Precise only to microseconds. When stored, any additional precision is
                    # rounded down.
                "referenceValue": "A String", # A reference to a document. For example:
                    # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
                "doubleValue": 3.14, # A double value.
                "mapValue": { # A map value. # A map value.
                  "fields": { # The map's fields.
                      #
                      # The map keys represent field names. Field names matching the regular
                      # expression `__.*__` are reserved. Reserved field names are forbidden except
                      # in certain documented contexts. The map keys, represented as UTF-8, must
                      # not exceed 1,500 bytes and cannot be empty.
                    "a_key": # Object with schema name: Value
                  },
                },
                "stringValue": "A String", # A string value.
                    #
                    # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes of the UTF-8 representation are considered by
                    # queries.
                "nullValue": "A String", # A null value.
                "arrayValue": { # An array value. # An array value.
                    #
                    # Cannot directly contain another array value, though can contain an
                    # map which contains another array.
                  "values": [ # Values in the array.
                    # Object with schema name: Value
                  ],
                },
                "integerValue": "A String", # An integer value.
                "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                    # of doubles representing degrees latitude and degrees longitude. Unless
                    # specified otherwise, this must conform to the
                    # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                    # standard</a>. Values must be within normalized ranges.
                  "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                  "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
                },
              },
              "fieldPath": "A String", # The path of the field. See Document.fields for the field path syntax
                  # reference.
              "minimum": { # A message that can hold any of the supported value types. # Sets the field to the minimum of its current value and the given value.
                  #
                  # This must be an integer or a double value.
                  # If the field is not an integer or double, or if the field does not yet
                  # exist, the transformation will set the field to the input value.
                  # If a minimum operation is applied where the field and the input value
                  # are of mixed types (that is - one is an integer and one is a double)
                  # the field takes on the type of the smaller operand. If the operands are
                  # equivalent (e.g. 3 and 3.0), the field does not change.
                  # 0, 0.0, and -0.0 are all zero. The minimum of a zero stored value and
                  # zero input value is always the stored value.
                  # The minimum of any numeric value x and NaN is NaN.
                "bytesValue": "A String", # A bytes value.
                    #
                    # Must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes are considered by queries.
                "booleanValue": True or False, # A boolean value.
                "timestampValue": "A String", # A timestamp value.
                    #
                    # Precise only to microseconds. When stored, any additional precision is
                    # rounded down.
                "referenceValue": "A String", # A reference to a document. For example:
                    # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
                "doubleValue": 3.14, # A double value.
                "mapValue": { # A map value. # A map value.
                  "fields": { # The map's fields.
                      #
                      # The map keys represent field names. Field names matching the regular
                      # expression `__.*__` are reserved. Reserved field names are forbidden except
                      # in certain documented contexts. The map keys, represented as UTF-8, must
                      # not exceed 1,500 bytes and cannot be empty.
                    "a_key": # Object with schema name: Value
                  },
                },
                "stringValue": "A String", # A string value.
                    #
                    # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                    # Only the first 1,500 bytes of the UTF-8 representation are considered by
                    # queries.
                "nullValue": "A String", # A null value.
                "arrayValue": { # An array value. # An array value.
                    #
                    # Cannot directly contain another array value, though can contain an
                    # map which contains another array.
                  "values": [ # Values in the array.
                    # Object with schema name: Value
                  ],
                },
                "integerValue": "A String", # An integer value.
                "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                    # of doubles representing degrees latitude and degrees longitude. Unless
                    # specified otherwise, this must conform to the
                    # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                    # standard</a>. Values must be within normalized ranges.
                  "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
                  "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
                },
              },
              "appendMissingElements": { # An array value. # Append the given elements in order if they are not already present in
                  # the current field value.
                  # If the field is not an array, or if the field does not yet exist, it is
                  # first set to the empty array.
                  #
                  # Equivalent numbers of different types (e.g. 3L and 3.0) are
                  # considered equal when checking if a value is missing.
                  # NaN is equal to NaN, and Null is equal to Null.
                  # If the input contains multiple equivalent values, only the first will
                  # be considered.
                  #
                  # The corresponding transform_result will be the null value.
                "values": [ # Values in the array.
                  # Object with schema name: Value
                ],
              },
              "removeAllFromArray": { # An array value. # Remove all of the given elements from the array in the field.
                  # If the field is not an array, or if the field does not yet exist, it is
                  # set to the empty array.
                  #
                  # Equivalent numbers of the different types (e.g. 3L and 3.0) are
                  # considered equal when deciding whether an element should be removed.
                  # NaN is equal to NaN, and Null is equal to Null.
                  # This will remove all equivalent values if there are duplicates.
                  #
                  # The corresponding transform_result will be the null value.
                "values": [ # Values in the array.
                  # Object with schema name: Value
                ],
              },
            },
          ],
        },
      },
    ],
    "labels": { # Labels associated with this write request.
      "a_key": "A String",
    },
    "streamToken": "A String", # A stream token that was previously sent by the server.
        # 
        # The client should set this field to the token from the most recent
        # WriteResponse it has received. This acknowledges that the client has
        # received responses up to this token. After sending this token, earlier
        # tokens may not be used anymore.
        # 
        # The server may close the stream if there are too many unacknowledged
        # responses.
        # 
        # Leave this field unset when creating a new stream. To resume a stream at
        # a specific point, set this field and the `stream_id` field.
        # 
        # Leave this field unset when creating a new stream.
    "streamId": "A String", # The ID of the write stream to resume.
        # This may only be set in the first message. When left empty, a new write
        # stream will be created.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response for Firestore.Write.
    "writeResults": [ # The result of applying the writes.
        #
        # This i-th write result corresponds to the i-th write in the
        # request.
      { # The result of applying a write.
        "updateTime": "A String", # The last update time of the document after applying the write. Not set
            # after a `delete`.
            #
            # If the write did not actually change the document, this will be the
            # previous update_time.
        "transformResults": [ # The results of applying each DocumentTransform.FieldTransform, in the
            # same order.
          { # A message that can hold any of the supported value types.
            "bytesValue": "A String", # A bytes value.
                #
                # Must not exceed 1 MiB - 89 bytes.
                # Only the first 1,500 bytes are considered by queries.
            "booleanValue": True or False, # A boolean value.
            "timestampValue": "A String", # A timestamp value.
                #
                # Precise only to microseconds. When stored, any additional precision is
                # rounded down.
            "referenceValue": "A String", # A reference to a document. For example:
                # `projects/{project_id}/databases/{database_id}/documents/{document_path}`.
            "doubleValue": 3.14, # A double value.
            "mapValue": { # A map value. # A map value.
              "fields": { # The map's fields.
                  #
                  # The map keys represent field names. Field names matching the regular
                  # expression `__.*__` are reserved. Reserved field names are forbidden except
                  # in certain documented contexts. The map keys, represented as UTF-8, must
                  # not exceed 1,500 bytes and cannot be empty.
                "a_key": # Object with schema name: Value
              },
            },
            "stringValue": "A String", # A string value.
                #
                # The string, represented as UTF-8, must not exceed 1 MiB - 89 bytes.
                # Only the first 1,500 bytes of the UTF-8 representation are considered by
                # queries.
            "nullValue": "A String", # A null value.
            "arrayValue": { # An array value. # An array value.
                #
                # Cannot directly contain another array value, though can contain an
                # map which contains another array.
              "values": [ # Values in the array.
                # Object with schema name: Value
              ],
            },
            "integerValue": "A String", # An integer value.
            "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
                # of doubles representing degrees latitude and degrees longitude. Unless
                # specified otherwise, this must conform to the
                # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                # standard</a>. Values must be within normalized ranges.
              "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
              "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
            },
          },
        ],
      },
    ],
    "streamToken": "A String", # A token that represents the position of this response in the stream.
        # This can be used by a client to resume the stream at this point.
        #
        # This field is always set.
    "commitTime": "A String", # The time at which the commit occurred.
    "streamId": "A String", # The ID of the stream.
        # Only set on the first message, when a new stream was created.
  }</pre>
</div>

</body></html>