DocumentReference
class DocumentReference : NSObject, @unchecked SendableA DocumentReference refers to a document location in a Firestore database and can be
used to write, read, or listen to the location. The document at the referenced location
may or may not exist. A DocumentReference can also be used to create a CollectionReference to
a subcollection.
-
The ID of the document referred to.
Declaration
Swift
var documentID: String { get } -
A reference to the collection to which this
DocumentReferencebelongs.Declaration
Swift
var parent: FIRCollectionReference { get } -
The
Firestorefor the Firestore database (useful for performing transactions, etc.).Declaration
Swift
var firestore: FIRFirestore { get } -
A string representing the path of the referenced document (relative to the root of the database).
Declaration
Swift
var path: String { get } -
Gets a
CollectionReferencereferring to the collection at the specified path, relative to this document.Declaration
Swift
func collection(_ collectionPath: String) -> FIRCollectionReferenceParameters
collectionPathThe slash-separated relative path of the collection for which to get a
CollectionReference.Return Value
The
CollectionReferenceat the specified collectionPath.
-
Writes to the document referred to by
DocumentReference. If the document doesn’t yet exist, this method creates it and then sets the data. If the document exists, this method overwrites the document data with the new values.Declaration
Swift
func setData(_ documentData: [String : Any])Parameters
documentDataA
Dictionarythat contains the fields and data to write to the document. -
Writes to the document referred to by this
DocumentReference. If the document does not yet exist, it will be created. If you passmerge:true, the provided data will be merged into any existing document.Declaration
Swift
func setData(_ documentData: [String : Any], merge: Bool)Parameters
documentDataA
Dictionarythat contains the fields and data to write to the document.mergeWhether to merge the provided data into any existing document. If enabled, all omitted fields remain untouched. If your input sets any field to an empty dictionary, any nested field is overwritten.
-
Writes to the document referred to by
documentand only replace the fields specified undermergeFields. Any field that is not specified inmergeFieldsis ignored and remains untouched. If the document doesn’t yet exist, this method creates it and then sets the data.It is an error to include a field in
mergeFieldsthat does not have a corresponding value in thedatadictionary.Declaration
Swift
func setData(_ documentData: [String : Any], mergeFields: [Any])Parameters
documentDataA
Dictionarycontaining the fields that make up the document to be written.mergeFieldsAn
Arraythat contains a list ofStringorFieldPathelements specifying which fields to merge. Fields can contain dots to reference nested fields within the document. If your input sets any field to an empty dictionary, any nested field is overwritten. -
Overwrites the document referred to by this
DocumentReference. If no document exists, it is created. If a document already exists, it is overwritten.Declaration
Swift
func setData(_ documentData: [String : Any]) async throwsParameters
documentDataA
Dictionarycontaining the fields that make up the document to be written.completionA block to execute once the document has been successfully written to the server. This block will not be called while the client is offline, though local changes will be visible immediately.
-
Writes to the document referred to by this
DocumentReference. If the document does not yet exist, it will be created. If you passmerge:true, the provided data will be merged into any existing document.Declaration
Swift
func setData(_ documentData: [String : Any], merge: Bool) async throwsParameters
documentDataA
Dictionarycontaining the fields that make up the document to be written.mergeWhether to merge the provided data into any existing document. If your input sets any field to an empty dictionary, any nested field is overwritten.
completionA block to execute once the document has been successfully written to the server. This block will not be called while the client is offline, though local changes will be visible immediately.
-
Writes to the document referred to by
documentand only replace the fields specified undermergeFields. Any field that is not specified inmergeFieldsis ignored and remains untouched. If the document doesn’t yet exist, this method creates it and then sets the data.It is an error to include a field in
mergeFieldsthat does not have a corresponding value in thedatadictionary.Declaration
Swift
func setData(_ documentData: [String : Any], mergeFields: [Any]) async throwsParameters
documentDataA
Dictionarycontaining the fields that make up the document to be written.mergeFieldsAn
Arraythat contains a list ofStringorFieldPathelements specifying which fields to merge. Fields can contain dots to reference nested fields within the document. If your input sets any field to an empty dictionary, any nested field is overwritten.completionA block to execute once the document has been successfully written to the server. This block will not be called while the client is offline, though local changes will be visible immediately.
-
Updates fields in the document referred to by this
DocumentReference. If the document does not exist, the update fails (specify a completion block to be notified).Declaration
Swift
func updateData(_ fields: [AnyHashable : Any])Parameters
fieldsA
Dictionarycontaining the fields (expressed as anStringorFieldPath) and values with which to update the document. -
Updates fields in the document referred to by this
DocumentReference. If the document does not exist, the update fails and the specified completion block receives an error.Declaration
Swift
func updateData(_ fields: [AnyHashable : Any]) async throwsParameters
fieldsA
Dictionarycontaining the fields (expressed as aStringorFieldPath) and values with which to update the document.completionA block to execute when the update is complete. If the update is successful the error parameter will be nil, otherwise it will give an indication of how the update failed. This block will only execute when the client is online and the commit has completed against the server. The completion handler will not be called when the device is offline, though local changes will be visible immediately.
-
Deletes the document referred to by this
DocumentReference.Declaration
Swift
func delete() -
Deletes the document referred to by this
DocumentReference.Declaration
Swift
func delete() async throwsParameters
completionA block to execute once the document has been successfully written to the server. This block will not be called while the client is offline, though local changes will be visible immediately.
-
Reads the document referenced by this
DocumentReference.This method attempts to provide up-to-date data when possible by waiting for data from the server, but it may return cached data or fail if you are offline and the server cannot be reached. See the
getDocument(source:completion:)method to change this behavior.Declaration
Swift
func getDocument() async throws -> FIRDocumentSnapshotParameters
completiona block to execute once the document has been successfully read.
-
Reads the document referenced by this
DocumentReference.Declaration
Swift
func getDocument(source: FirestoreSource) async throws -> FIRDocumentSnapshotParameters
sourceindicates whether the results should be fetched from the cache only (
Source.cache), the server only (Source.server), or to attempt the server and fall back to the cache (Source.default).completiona block to execute once the document has been successfully read.
-
Attaches a listener for
DocumentSnapshotevents.Declaration
Swift
func addSnapshotListener(_ listener: @escaping (FIRDocumentSnapshot?, (any Error)?) -> Void) -> any ListenerRegistrationParameters
listenerThe listener to attach.
Return Value
A
ListenerRegistrationthat can be used to remove this listener. -
Attaches a listener for
DocumentSnapshotevents.Declaration
Swift
func addSnapshotListener(includeMetadataChanges: Bool, listener: @escaping (FIRDocumentSnapshot?, (any Error)?) -> Void) -> any ListenerRegistrationParameters
includeMetadataChangesWhether metadata-only changes (i.e. only
DocumentSnapshot.metadatachanged) should trigger snapshot events.listenerThe listener to attach.
Return Value
A
ListenerRegistrationthat can be used to remove this listener. -
Attaches a listener for
DocumentSnapshotevents.Declaration
Swift
func addSnapshotListener(options: SnapshotListenOptions, listener: @escaping (FIRDocumentSnapshot?, (any Error)?) -> Void) -> any ListenerRegistrationParameters
optionsSets snapshot listener options, including whether metadata-only changes should trigger snapshot events, the source to listen to, the executor to use to call the listener, or the activity to scope the listener to.
listenerThe listener to attach.
Return Value
A
ListenerRegistrationthat can be used to remove this listener. -
Declaration
Swift
public static func wrap(_ documentReference: DocumentReference) throws -> Self -
Fetches and decodes the document referenced by this
DocumentReference.This allows users to retrieve a Firestore document and have it decoded to an instance of caller-specified type as follows:
ref.getDocument(as: Book.self) { result in do { let book = try result.get() } catch { // Handle error } }This method attempts to provide up-to-date data when possible by waiting for data from the server, but it may return cached data or fail if you are offline and the server cannot be reached. If
Tdenotes an optional type, the method returns a successful status with a value ofnilfor non-existing documents.Declaration
Swift
func getDocument<T: Decodable>(as type: T.Type, with serverTimestampBehavior: ServerTimestampBehavior = .none, decoder: Firestore.Decoder = .init(), source: FirestoreSource = .default, completion: @escaping (Result<T, Error>) -> Void)Parameters
asA
Decodabletype to convert the document fields to.serverTimestampBehaviorConfigures how server timestamps that have not yet been set to their final value are returned from the snapshot.
decoderThe decoder to use to convert the document. Defaults to use the default decoder.
sourceIndicates whether the results should be fetched from the cache only (
Source.cache), the server only (Source.server), or to attempt the server and fall back to the cache (Source.default).completionThe closure to call when the document snapshot has been fetched and decoded.
-
Fetches and decodes the document referenced by this
DocumentReference.This allows users to retrieve a Firestore document and have it decoded to an instance of caller-specified type as follows:
do { let book = try await ref.getDocument(as: Book.self) } catch { // Handle error }This method attempts to provide up-to-date data when possible by waiting for data from the server, but it may return cached data or fail if you are offline and the server cannot be reached. If
Tdenotes an optional type, the method returns a successful status with a value ofnilfor non-existing documents.Declaration
Swift
@available(iOS 13, tvOS 13, macOS 10.15, watchOS 7, *) func getDocument<T: Decodable>(as type: T.Type, with serverTimestampBehavior: ServerTimestampBehavior = .none, decoder: Firestore.Decoder = .init(), source: FirestoreSource = .default) async throws -> TParameters
asA
Decodabletype to convert the document fields to.serverTimestampBehaviorConfigures how server timestamps that have not yet been set to their final value are returned from the snapshot.
decoderThe decoder to use to convert the document. Defaults to use the default decoder.
sourceIndicates whether the results should be fetched from the cache only (
Source.cache), the server only (Source.server), or to attempt the server and fall back to the cache (Source.default).Return Value
This instance of the supplied
DecodabletypeT. -
Encodes an instance of
Encodableand overwrites the encoded data to the document referred by thisDocumentReference. If no document exists, it is created. If a document already exists, it is overwritten.See
Firestore.Encoderfor more details about the encoding process.Declaration
Parameters
valueAn instance of
Encodableto be encoded to a document.encoderAn encoder instance to use to run the encoding.
completionA closure to execute once the document has been successfully written to the server. This closure will not be called while the client is offline, though local changes will be visible immediately.
-
Encodes an instance of
Encodableand overwrites the encoded data to the document referred by thisDocumentReference. If no document exists, it is created. If a document already exists, it is overwritten. If you pass merge:true, the providedEncodablewill be merged into any existing document.See
Firestore.Encoderfor more details about the encoding process.Declaration
Parameters
valueAn instance of
Encodableto be encoded to a document.mergeWhether to merge the provided
Encodableinto any existing document.encoderAn encoder instance to use to run the encoding.
completionA closure to execute once the document has been successfully written to the server. This closure will not be called while the client is offline, though local changes will be visible immediately.
-
Encodes an instance of
Encodableand writes the encoded data to the document referred by thisDocumentReferenceby only replacing the fields specified undermergeFields. Any field that is not specified in mergeFields is ignored and remains untouched. If the document doesn’t yet exist, this method creates it and then sets the data.It is an error to include a field in
mergeFieldsthat does not have a corresponding field in theEncodable.See
Firestore.Encoderfor more details about the encoding process.Declaration
Parameters
valueAn instance of
Encodableto be encoded to a document.mergeFieldsArray of
StringorFieldPathelements specifying which fields to merge. Fields can contain dots to reference nested fields within the document.encoderAn encoder instance to use to run the encoding.
completionA closure to execute once the document has been successfully written to the server. This closure will not be called while the client is offline, though local changes will be visible immediately.