Skip to content

feat: add support for Firestore Pipeline#292

Open
Lyokone wants to merge 3 commits into
mainfrom
feat/pipeline
Open

feat: add support for Firestore Pipeline#292
Lyokone wants to merge 3 commits into
mainfrom
feat/pipeline

Conversation

@Lyokone

@Lyokone Lyokone commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Add support for Firestore Pipeline

How to use

final snapshot = await firestore
    .pipeline()
    .collection('books')
    .where(Expression.field('active').equalValue(true))
    .sort([Expression.field('price').ascending()])
    .select([
      Expression.field('title'),
      Expression.field('price'),
      Expression.field('title').toUpperCase().as('upperTitle'),
      Expression.field('tags').arrayLength().as('tagCount'),
    ])
    .limit(10)
    .execute();
for (final result in snapshot.results) {
  print(result.data());
}

Aggregates

Aggregate stages use aliased aggregate expressions:

final snapshot = await firestore
    .pipeline()
    .collection('books')
    .where(Expression.field('active').equalValue(true))
    .aggregate([
      Expression.field('price').sum().as('totalPrice'),
      Expression.field('rating').average().as('averageRating'),
      PipelineFunctions.count().as('bookCount'),
    ])
    .execute();
final data = snapshot.results.single.data();
print(data);

Expressions

Use Expression.field, Expression.constant, and Expression.variable to
build expressions. Most helpers are also available as fluent methods:

final expression = Expression.field('createdAt')
    .timestampSubtract('day', 7)
    .timestampToUnixSeconds()
    .as('createdSeconds');

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces Firestore Pipeline operations to the google_cloud_firestore package, enabling server-side projections, expressions, aggregates, and vector search, complete with comprehensive E2E and unit tests. The review feedback highlights several key improvement opportunities: reverting a breaking change to the DistanceMeasure enum by converting values to lowercase locally within the pipeline execution, optimizing performance by extracting a frequently compiled regular expression into a file-level constant, and adding as well as exporting missing top-level comparison helpers (lessThan and greaterThan) to ensure API completeness.

Comment thread packages/google_cloud_firestore/lib/src/pipeline.dart
Comment thread packages/google_cloud_firestore/lib/src/pipeline.dart Outdated
Comment thread packages/google_cloud_firestore/lib/src/pipeline.dart
Comment thread packages/google_cloud_firestore/lib/google_cloud_firestore.dart
@github-actions

Copy link
Copy Markdown

Coverage Report

✅ Coverage 71.95% meets 40% threshold

Total Coverage: 71.95%
Lines Covered: 5488/7627

Package Breakdown

Package Coverage
google_cloud_firestore 71.31%
firebase_admin_sdk 72.66%

Minimum threshold: 40%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant