getDocRefById method
Gets a document reference by ID for raw data access
Returns DocumentReference
for Firestore operations
Includes converters for field management
Parameters:
id
unique identifier of the document
collectionPathOverride
override path for collection groups
Features:
- Raw data access
- Local ID field management
- Document reference handling
- Automatic field cleanup
Example:
final docRef = api.getDocRefById(id: 'user-123');
final snapshot = await docRef.get();
if (snapshot.exists) {
print('User data ${snapshot.data()}');
}
See also:
- getDocRefByIdWithConverter type-safe references
- getById direct data access
Implementation
DocumentReference<Map<String, dynamic>> getDocRefById({
required String id,
String? collectionPathOverride,
}) {
assert(
_isCollectionGroup == (collectionPathOverride != null),
'Firestore does not support finding a document by id when communicating with a collection group, '
'therefore, you must specify the collectionPathOverride containing all parent collection and document ids '
'in order to make this method work.',
);
_log.debug(
message: 'Finding document..',
sensitiveData: SensitiveData(
path: collectionPathOverride ?? _collectionPath(),
id: id,
),
);
return _firebaseFirestore
.doc('${collectionPathOverride ?? _collectionPath()}/$id')
.withConverter<Map<String, dynamic>>(
fromFirestore: (snapshot, _) {
final data = snapshot.data() ?? {};
try {
return data
.tryAddLocalId(
snapshot.id,
idFieldName: _idFieldName,
tryAddLocalId: _tryAddLocalId,
)
.tryAddLocalDocumentReference(
snapshot.reference,
referenceFieldName: _documentReferenceFieldName,
tryAddLocalDocumentReference: _tryAddLocalDocumentReference,
);
} catch (error) {
_log.error(
message:
'Unexpected error caught while adding local id and document reference',
sensitiveData: SensitiveData(
path: collectionPathOverride ?? _collectionPath(),
id: snapshot.id,
data: data,
),
);
rethrow;
}
},
toFirestore: (data, _) {
try {
return data
.tryRemoveLocalId(
idFieldName: _idFieldName,
tryRemoveLocalId: _tryAddLocalId,
)
.tryRemoveLocalDocumentReference(
referenceFieldName: _documentReferenceFieldName,
tryRemoveLocalDocumentReference: _tryAddLocalDocumentReference,
);
} catch (error) {
_log.error(
message:
'Unexpected error caught while removing local id and document reference',
sensitiveData: SensitiveData(
path: collectionPathOverride ?? _collectionPath(),
id: id,
data: data,
),
);
rethrow;
}
},
);
}