withConverter method

CollectionGroup withConverter(
  1. FirestoreDataConverter? converter
)
override

Partitions a query by returning partition cursors that can be used to run the query in parallel. The returned cursors are split points that can be used as starting and end points for individual query invocations.

@param desiredPartitionCount The desired maximum number of partition points. The number must be strictly positive. The actual number of partitions returned may be fewer. @return An AsyncIterable of QueryPartitions. Applies a custom data converter to this CollectionGroup, allowing you to use your own custom model objects with Firestore. When you call get() on the returned CollectionGroup, the provided converter will convert between Firestore data of type NewDbModelType and your custom type NewAppModelType.

Using the converter allows you to specify generic type arguments when storing and retrieving objects from Firestore.

@example class Post { constructor(readonly title: string, readonly author: string) {}

toString(): string { return this.title + ', by ' + this.author; } }

const postConverter = { toFirestore(post: Post): FirebaseFirestore.DocumentData { return {title: post.title, author: post.author}; }, fromFirestore( snapshot: FirebaseFirestore.QueryDocumentSnapshot ): Post { const data = snapshot.data(); return new Post(data.title, data.author); } };

const querySnapshot = await Firestore() .collectionGroup('posts') .withConverter(postConverter) .get(); for (const doc of querySnapshot.docs) { const post = doc.data(); post.title; // string post.toString(); // Should be defined post.someNonExistentProperty; // TS error }

@param converter Converts objects to and from Firestore. Passing in null removes the current converter. @return A CollectionGroup that uses the provided converter.

Implementation

// TODO: Is this possible in dart?
// getPartitions(
//   desiredPartitionCount: number
// ): AsyncIterable<QueryPartition<AppModelType, DbModelType>>;

/// Applies a custom data converter to this `CollectionGroup`, allowing you
/// to use your own custom model objects with Firestore. When you call get()
/// on the returned `CollectionGroup`, the provided converter will convert
/// between Firestore data of type `NewDbModelType` and your custom type
/// `NewAppModelType`.
///
/// Using the converter allows you to specify generic type arguments when
/// storing and retrieving objects from Firestore.
///
/// @example
/// class Post {
///   constructor(readonly title: string, readonly author: string) {}
///
///   toString(): string {
///     return this.title + ', by ' + this.author;
///   }
/// }
///
/// const postConverter = {
///   toFirestore(post: Post): FirebaseFirestore.DocumentData {
///     return {title: post.title, author: post.author};
///   },
///   fromFirestore(
///     snapshot: FirebaseFirestore.QueryDocumentSnapshot
///   ): Post {
///     const data = snapshot.data();
///     return new Post(data.title, data.author);
///   }
/// };
///
/// const querySnapshot = await Firestore()
///   .collectionGroup('posts')
///   .withConverter(postConverter)
///   .get();
/// for (const doc of querySnapshot.docs) {
///   const post = doc.data();
///   post.title; // string
///   post.toString(); // Should be defined
///   post.someNonExistentProperty; // TS error
/// }
///
/// @param converter Converts objects to and from Firestore. Passing in
/// `null` removes the current converter.
/// @return A `CollectionGroup` that uses the provided converter.
external CollectionGroup withConverter(FirestoreDataConverter? converter);