react-native-firebase/docs/modules/firestore.md

4.4 KiB

Firestore (Beta)

RNFirebase mimics the Firestore Web SDK, whilst providing support for devices in low/no data connection state.

All Firestore operations are accessed via firestore(). For detailed documentation of the supported methods demonstrated below please use the official firestore web sdk guides.

?> Please note that Persistence (offline support) is enabled by default with Firestore on iOS and Android.

Add and Manage Data

Collections

Read information about a collection example:

import firebase from 'react-native-firebase';

firebase.firestore()
  .collection('posts')
  .get()
  .then(querySnapshot => {
    // Access all the documents in the collection
    const docs = querySnapshot.docs;
    // Access the list of document changes for the collection
    const changes = querySnapshot.docChanges;
    // Loop through the documents
    querySnapshot.forEach((doc) => {
      const value = doc.data();
    })
  })

Add to a collection example (generated ID):

import firebase from 'react-native-firebase';

firebase.firestore()
  .collection('posts')
  .add({
    title: 'Amazing post',
  })
  .then(() => {
    // Document added to collection and ID generated
    // Will have path: `posts/{generatedId}`
  })

Add to a collection example (manual ID):

import firebase from 'react-native-firebase';

firebase.firestore()
  .collection('posts')
  .doc('post1')
  .set({
    title: 'My awesome post',
    content: 'Some awesome content',
  })
  .then(() => {
    // Document added to collection with path: `posts/post1`
  })

Documents

There are multiple ways to read a document. The following are equivalent examples:

import firebase from 'react-native-firebase';

firebase.firestore()
  .doc('posts/posts1')
  .get((documentSnapshot) => {
    const value = documentSnapshot.data();
  });

firebase.firestore()
  .collection('posts')
  .doc('posts1')
  .get((documentSnapshot) => {
    const value = documentSnapshot.data();
  });

Create a document example:

import firebase from 'react-native-firebase';

firebase.firestore()
  .doc('posts/posts1')
  .set({
    title: 'My awesome post',
    content: 'Some awesome content',
  })
  .then(() => {
    // Document created
  });

Updating a document example:

import firebase from 'react-native-firebase';

firebase.firestore()
  .doc('posts/posts1')
  .update({
    title: 'My awesome post',
  })
  .then(() => {
    // Document created
  });

Deleting a document example:

import firebase from 'react-native-firebase';

firebase.firestore()
  .doc('posts/posts1')
  .delete()
  .then(() => {
    // Document deleted
  });

Batching document updates

Writes, updates and deletes to documents can be batched and committed atomically as follows:

import firebase from 'react-native-firebase';

const ayRef = firebase.firestore().doc('places/AY');
const lRef = firebase.firestore().doc('places/LON');
const nycRef = firebase.firestore().doc('places/NYC');
const sfRef = firebase.firestore().doc('places/SF');

firebase.firestore()
  .batch()
  .set(ayRef, { name: 'Aylesbury' })
  .set(lRef, { name: 'London' })
  .set(nycRef, { name: 'New York City' })
  .set(sfRef, { name: 'San Francisco' })
  .update(nycRef, { population: 1000000 })
  .update(sfRef, { name: 'San Fran' })
  .set(lRef, { population: 3000000 }, { merge: true })
  .delete(ayRef)
  .commit()
  .then(() => {
    // Would end up with three documents in the collection: London, New York City and San Francisco
  });

Transactions

Coming soon

Realtime Updates

Collections

Listen to collection updates example:

import firebase from 'react-native-firebase';

firebase.firestore()
  .collection('cities')
  .where('state', '==', 'CA')
  .onSnapshot((querySnapshot) => {
    querySnapshot.forEach((doc) => {
      // DocumentSnapshot available
    })
  })

The snapshot handler will receive a new query snapshot every time the query results change (that is, when a document is added, removed, or modified).

Documents

Listen to document updates example:

import firebase from 'react-native-firebase';

firebase.firestore()
  .doc('posts/post1')
  .onSnapshot((documentSnapshot) => {
    // DocumentSnapshot available
  })

The snapshot handler will receive the current contents of the document, and any subsequent changes to the document.