DocumentReference(*path, **kwargs)
A reference to a document in a Firestore database.
The document may already exist or can be created by this class.
Parameters
Name | Description |
path |
Tuple[str, ...]
The components in the document path. This is a series of strings representing each collection and sub-collection ID, as well as the document IDs for any documents that contain a sub-collection (as well as the base document). |
kwargs |
dict
The keyword arguments for the constructor. The only supported keyword is |
Methods
collections
collections(page_size: Optional[int] = None, retry: google.api_core.retry.Retry = <_MethodDefault._DEFAULT_VALUE: <object object>>, timeout: Optional[float] = None)
List subcollections of the current document.
Name | Description |
page_size |
Optional[int]]
The maximum number of collections in each page of results from this request. Non-positive values are ignored. Defaults to a sensible value set by the API. |
retry |
google.api_core.retry.Retry
Designation of what errors, if any, should be retried. Defaults to a system-specified policy. |
timeout |
float
The timeout for this request. Defaults to a system-specified value. |
Type | Description |
Sequence[CollectionReference] | iterator of subcollections of the current document. If the document does not exist at the time of `snapshot`, the iterator will be empty |
create
create(document_data: dict, retry: google.api_core.retry.Retry = <_MethodDefault._DEFAULT_VALUE: <object object>>, timeout: Optional[float] = None)
Create a document in the Firestore database.
document_data = {"a": 1, "b": {"c": "Two"}} document.get().to_dict() is None # does not exist True document.create(document_data) document.get().to_dict() == document_data # exists True
Name | Description |
document_data |
dict
Property names and values to use for creating a document. |
retry |
google.api_core.retry.Retry
Designation of what errors, if any, should be retried. Defaults to a system-specified policy. |
timeout |
float
The timeout for this request. Defaults to a system-specified value. |
Type | Description |
google.cloud.exceptions.Conflict | If the document already exists. |
Type | Description |
WriteResult | The write result corresponding to the committed document. A write result contains an ``update_time`` field. |
delete
delete(option: Optional[google.cloud.firestore_v1._helpers.WriteOption] = None, retry: google.api_core.retry.Retry = <_MethodDefault._DEFAULT_VALUE: <object object>>, timeout: Optional[float] = None)
Delete the current document in the Firestore database.
Name | Description |
option |
Optional[WriteOption]
A write option to make assertions / preconditions on the server state of the document before applying changes. |
retry |
google.api_core.retry.Retry
Designation of what errors, if any, should be retried. Defaults to a system-specified policy. |
timeout |
float
The timeout for this request. Defaults to a system-specified value. |
Type | Description |
`google.protobuf.timestamp_pb2.Timestamp` | The time that the delete request was received by the server. If the document did not exist when the delete was sent (i.e. nothing was deleted), this method will still succeed and will still return the time that the request was received by the server. |
get
get(field_paths: Optional[Iterable[str]] = None, transaction=None, retry: google.api_core.retry.Retry = <_MethodDefault._DEFAULT_VALUE: <object object>>, timeout: Optional[float] = None)
Retrieve a snapshot of the current document.
See xref_field_path for more information on field paths.
If a transaction
is used and it already has write operations
added, this method cannot be used (i.e. read-after-write is not
allowed).
Name | Description |
field_paths |
Optional[Iterable[str, ...]]
An iterable of field paths ( |
retry |
google.api_core.retry.Retry
Designation of what errors, if an y, should be retried. Defaults to a system-specified policy. |
timeout |
float
The timeout for this request. Defaults to a system-specified value. |
transaction |
Optional[Transaction]
An existing transaction that this reference will be retrieved in. |
Type | Description |
DocumentSnapshot | A snapshot of the current document. If the document does not exist at the time of the snapshot is taken, the snapshot's `reference`, `data`, `update_time`, and `create_time` attributes will all be ``None`` and its `exists` attribute will be ``False``. |
on_snapshot
on_snapshot(callback: Callable)
Watch this document.
This starts a watch on this document using a background thread. The provided callback is run on the snapshot.
Name | Description |
callback |
Callable[[DocumentSnapshot], NoneType] Example: .. code-block:: python from google.cloud import firestore_v1 db = firestore_v1.Client() collection_ref = db.collection(u'users') def on_snapshot(document_snapshot, changes, read_time): doc = document_snapshot print(u'{} => {}'.format(doc.id, doc.to_dict())) doc_ref = db.collection(u'users').document( u'alovelace' + unique_resource_id()) # Watch this document doc_watch = doc_ref.on_snapshot(on_snapshot) # Terminate this watch doc_watch.unsubscribe()
a callback to run when a change occurs |
set
set(document_data: dict, merge: bool = False, retry: google.api_core.retry.Retry = <_MethodDefault._DEFAULT_VALUE: <object object>>, timeout: Optional[float] = None)
Create / replace / merge a document in the Firestore database.
To "upsert" a document (create if it doesn't exist, replace completely if it does), leave the
merge
argument at its default:document_data = {"a": 1, "b": {"c": "Two"}} document.get().to_dict() is None # document exists False document.set(document_data) document.get().to_dict() == document_data # exists True
To "merge"
document_data
with an existing document (creating if the document does not exist), passmerge
as True``:document_data = {"a": 1, "b": {"c": "Two"}} document.get().to_dict() == {"d": "Three", "b": {}} # exists document.set(document_data, merge=True) document.get().to_dict() == {"a": 1, "d": "Three", "b": {"c": "Two"}} True
In this case, existing documents with top-level keys which are not present in
document_data
("d"
) will preserve the values of those keys.To merge only specific fields of
document_data
with existing documents (creating if the document does not exist), passmerge
as a list of field paths:
document_data = {"a": 1, "b": {"c": "Two"}} document.get().to_dict() == {"b": {"c": "One", "d": "Four" }} # exists True document.set(document_data, merge=["b.c"]) document.get().to_dict() == {"b": {"c": "Two", "d": "Four" }} True
For more information on field paths, see xref_field_path.
Name | Description |
document_data |
dict
Property names and values to use for replacing a document. |
merge |
Optional[bool] or Optional[List
If True, apply merging instead of overwriting the state of the document. |
retry |
google.api_core.retry.Retry
Designation of what errors, if any, should be retried. Defaults to a system-specified policy. |
timeout |
float
The timeout for this request. Defaults to a system-specified value. |
Type | Description |
WriteResult | The write result corresponding to the committed document. A write result contains an ``update_time`` field. |
update
update(field_updates: dict, option: Optional[google.cloud.firestore_v1._helpers.WriteOption] = None, retry: google.api_core.retry.Retry = <_MethodDefault._DEFAULT_VALUE: <object object>>, timeout: Optional[float] = None)
Update an existing document in the Firestore database.
By default, this method verifies that the document exists on the
server before making updates. A write option
can be specified to
override these preconditions.
Each key in field_updates
can either be a field name or a
field path (For more information on field paths, see
xref_field_path.)
To illustrate this, consider a document with
>>> snapshot = document.get()
>>> snapshot.to_dict()
{
'foo': {
'bar': 'baz',
},
'other': True,
}
stored on the server. If the field name is used in the update:
>>> field_updates = {
... 'foo': {
... 'quux': 800,
... },
... }
>>> document.update(field_updates)
then all of foo
will be overwritten on the server and the new
value will be
>>> snapshot = document.get()
>>> snapshot.to_dict()
{
'foo': {
'quux': 800,
},
'other': True,
}
On the other hand, if a .
-delimited field path is used in the
update:
>>> field_updates = {
... 'foo.quux': 800,
... }
>>> document.update(field_updates)
then only foo.quux
will be updated on the server and the
field foo.bar
will remain intact:
>>> snapshot = document.get()
>>> snapshot.to_dict()
{
'foo': {
'bar': 'baz',
'quux': 800,
},
'other': True,
}
>>> field_updates = {
... 'other': firestore.DELETE_FIELD,
... }
>>> document.update(field_updates)
would update the value on the server to:
>>> snapshot = document.get()
>>> snapshot.to_dict()
{
'foo': {
'bar': 'baz',
},
}
To set a field to the current time on the server when the update is received, use the xref_SERVER_TIMESTAMP sentinel. Sending
>>> field_updates = {
... 'foo.now': firestore.SERVER_TIMESTAMP,
... }
>>> document.update(field_updates)
would update the value on the server to:
>>> snapshot = document.get()
>>> snapshot.to_dict()
{
'foo': {
'bar': 'baz',
'now': datetime.datetime(2012, ...),
},
'other': True,
}
Name | Description |
field_updates |
dict
Field names or paths to update and values to update with. |
option |
Optional[WriteOption]
A write option to make assertions / preconditions on the server state of the document before applying changes. |
retry |
google.api_core.retry.Retry
Designation of what errors, if any, should be retried. Defaults to a system-specified policy. |
timeout |
float
The timeout for this request. Defaults to a system-specified value. |
Type | Description |
google.cloud.exceptions.NotFound | If the document does not exist. |
Type | Description |
WriteResult | The write result corresponding to the updated document. A write result contains an ``update_time`` field. |