Skip to content
This repository was archived by the owner on Apr 4, 2023. It is now read-only.

Commit 6171282

Browse files
Feature/expanded query #857
1 parent 041dd7b commit 6171282

File tree

6 files changed

+49
-22
lines changed

6 files changed

+49
-22
lines changed

demo-ng/app/tabs/firestore/firestore.component.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
<Button text="Where" (tap)="firestoreWhere()" class="button"></Button>
2626
<Button text="Where, Order, Limit" (tap)="firestoreWhereOrderLimit()" class="button"></Button>
2727
<Button text="Where array_contains" (tap)="firestoreWhereCityHasALake()" class="button"></Button>
28-
<Button text="Start After" (tap)="firestoreStartAfter()" class="button"></Button>
28+
<Button text="Start at 'LA'" (tap)="firestoreStartAt()" class="button"></Button>
29+
<Button text="Start after 'LA'" (tap)="firestoreStartAfter()" class="button"></Button>
2930
<Button text="Delete" (tap)="firestoreDelete()" class="button"></Button>
3031
<Button text="Transactional update (iOS)" (tap)="transactionalUpdate()" class="button"></Button>
3132
<Button text="Write batch" (tap)="writeBatch()" class="button"></Button>

demo-ng/app/tabs/firestore/firestore.component.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -345,13 +345,26 @@ export class FirestoreComponent {
345345
.catch(error => console.log("doTransaction error: " + error));
346346
}
347347

348+
public firestoreStartAt(): void {
349+
firebase.firestore().collection('cities')
350+
.doc('LA')
351+
.get()
352+
.then(doc => {
353+
firebase.firestore().collection('cities')
354+
.orderBy('name', 'asc')
355+
.startAt(doc)
356+
.get()
357+
.then(snap => snap.forEach(doc => console.log(doc.id, doc.data())));
358+
});
359+
}
360+
348361
public firestoreStartAfter(): void {
349-
const beijingSnapshot = firebase.firestore().collection('cities')
350-
.doc('BJ')
362+
firebase.firestore().collection('cities')
363+
.doc('LA')
351364
.get()
352365
.then(doc => {
353366
firebase.firestore().collection('cities')
354-
.orderBy('country', 'asc')
367+
.orderBy('name', 'asc')
355368
.startAfter(doc)
356369
.get()
357370
.then(snap => snap.forEach(doc => console.log(doc.id, doc.data())));

docs/FIRESTORE.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,24 @@ query
239239
});
240240
```
241241

242+
### Paginate data with query cursors
243+
You can use `startAt`, `startAfter`, `endAt`, and `endBefore` as documented for 'WEB' [here](https://firebase.google.com/docs/firestore/query-data/query-cursors).
244+
245+
Here's an example, grabbing cities ordered by name, starting after 'LA':
246+
247+
```typescript
248+
firebase.firestore().collection('cities')
249+
.doc('LA')
250+
.get()
251+
.then(doc => {
252+
firebase.firestore().collection('cities')
253+
.orderBy('name', 'asc')
254+
.startAfter(doc)
255+
.get()
256+
.then(snap => snap.forEach(doc => console.log(doc.id, doc.data())));
257+
});
258+
```
259+
242260
### Batched Writes: `batch()`
243261
To perform a (mixed) sequence of `set`, `update`, and/or `delete` operations in an atomic fashion
244262
(everything is rolled back if 1 operation fails), use the `batch` feature.

src/firebase.android.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2672,20 +2672,19 @@ firebase.firestore.limit = (collectionPath: string, limit: number, query: com.go
26722672
};
26732673

26742674
firebase.firestore.startAfter = (collectionPath: string, snapshot: DocumentSnapshot, query: com.google.firebase.firestore.Query): firestore.Query => {
2675-
query = query.startAt(snapshot.android);
2676-
return firebase.firestore._getQuery(collectionPath, query);
2675+
return firebase.firestore._getQuery(collectionPath, query.startAfter(snapshot.android));
26772676
};
26782677

26792678
firebase.firestore.startAt = (collectionPath: string, snapshot: DocumentSnapshot, query: com.google.firebase.firestore.Query): firestore.Query => {
2680-
return firebase.firestore._getQuery(collectionPath, query);
2679+
return firebase.firestore._getQuery(collectionPath, query.startAt(snapshot.android));
26812680
};
26822681

26832682
firebase.firestore.endAt = (collectionPath: string, snapshot: DocumentSnapshot, query: com.google.firebase.firestore.Query): firestore.Query => {
2684-
return firebase.firestore._getQuery(collectionPath, query);
2683+
return firebase.firestore._getQuery(collectionPath, query.endAt(snapshot.android));
26852684
};
26862685

26872686
firebase.firestore.endBefore = (collectionPath: string, snapshot: DocumentSnapshot, query: com.google.firebase.firestore.Query): firestore.Query => {
2688-
return firebase.firestore._getQuery(collectionPath, query);
2687+
return firebase.firestore._getQuery(collectionPath, query.endBefore(snapshot.android));
26892688
};
26902689

26912690

src/firebase.d.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -713,8 +713,8 @@ export namespace firestore {
713713
}
714714

715715
export interface DocumentSnapshot {
716-
ios?: FIRDocumentSnapshot;
717-
android?: com.google.firebase.firestore.DocumentSnapshot;
716+
ios?: any; /* FIRDocumentSnapshot */
717+
android?: any; /* com.google.firebase.firestore.DocumentSnapshot */
718718
id: string;
719719
exists: boolean;
720720
data(): DocumentData;
@@ -750,7 +750,7 @@ export namespace firestore {
750750

751751
startAfter(snapshot: DocumentSnapshot): Query;
752752

753-
endAt(snaptshot: DocumentSnapshot): Query;
753+
endAt(snapshot: DocumentSnapshot): Query;
754754

755755
endBefore(snapshot: DocumentSnapshot): Query;
756756
}

src/firebase.ios.ts

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2161,7 +2161,7 @@ firebase.firestore.Transaction = (nativeTransaction: FIRTransaction): firestore.
21612161

21622162
public get = (documentRef: firestore.DocumentReference): DocumentSnapshot => {
21632163
const docSnapshot: FIRDocumentSnapshot = nativeTransaction.getDocumentError(documentRef.ios);
2164-
return new DocumentSnapshot(docSnapshot.exists ? docSnapshot.documentID : null, docSnapshot.exists, firebase.toJsObject(docSnapshot.data()));
2164+
return new DocumentSnapshot(docSnapshot);
21652165
};
21662166

21672167
public set = (documentRef: firestore.DocumentReference, data: firestore.DocumentData, options?: firestore.SetOptions): firestore.Transaction => {
@@ -2590,23 +2590,19 @@ firebase.firestore.limit = (collectionPath: string, limit: number, query: FIRQue
25902590
};
25912591

25922592
firebase.firestore.startAt = (collectionPath: string, document: DocumentSnapshot, query: FIRQuery) => {
2593-
query = query.queryStartingAtDocument(document.ios);
2594-
return firebase.firestore._getQuery(collectionPath, query);
2595-
}
2593+
return firebase.firestore._getQuery(collectionPath, query.queryStartingAtDocument(document.ios));
2594+
};
25962595

25972596
firebase.firestore.startAfter = (collectionPath: string, document: DocumentSnapshot, query: FIRQuery) => {
2598-
query = query.queryStartingAfterDocument(document.ios);
2599-
return firebase.firestore._getQuery(collectionPath, query);
2597+
return firebase.firestore._getQuery(collectionPath, query.queryStartingAfterDocument(document.ios));
26002598
};
26012599

26022600
firebase.firestore.endAt = (collectionPath: string, document: DocumentSnapshot, query: FIRQuery) => {
2603-
query = query.queryEndingAtDocument(document.ios);
2604-
return firebase.firestore._getQuery(collectionPath, query);
2601+
return firebase.firestore._getQuery(collectionPath, query.queryEndingAtDocument(document.ios));
26052602
};
26062603

26072604
firebase.firestore.endBefore = (collectionPath: string, document: DocumentSnapshot, query: FIRQuery) => {
2608-
query = query.queryEndingBeforeDocument(document.ios);
2609-
return firebase.firestore._getQuery(collectionPath, query);
2605+
return firebase.firestore._getQuery(collectionPath, query.queryEndingBeforeDocument(document.ios));
26102606
};
26112607

26122608
// see https://developer.apple.com/reference/usernotifications/unusernotificationcenterdelegate?language=objc

0 commit comments

Comments
 (0)