Get started with Firestore Enterprise edition using server client libraries

This quickstart shows you how to set up Cloud Firestore , add data, then use either Core operations or Pipeline operations to query the data you just added in the Firebase console using server client libraries for Java, Node.js, and Python.

Use these client libraries to set up privileged server environments with full access to your database..

Create a Cloud Firestore database

  1. If you haven't already, create a Firebase project: In the Firebase console , click Add project, then follow the on-screen instructions to create a Firebase project or to add Firebase services to an existing Google Cloud project.

  2. Open your project in the Firebase console. In the left panel, expand Buildand then select Firestore database .

  3. Click Create database.

  4. Select Enterprisefor the database mode.

  5. Select Firestore in Native Modefor the operation mode, which supports Core and Pipeline operations.

  6. Select a location for your database.

  7. Select a starting mode for your Cloud Firestore Security Rules :

    Test mode

    Good for getting started with the mobile and web client libraries, but allows anyone to read and overwrite your data. After testing, make sure to review the Secure your data section.

    To get started with the web, Apple platforms, or Android SDK, select test mode.

    Production mode

    Denies all reads and writes from mobile and web clients. Your authenticated application servers (Node.js, Python, Java) can still access your database.

    Your initial set of Cloud Firestore Security Rules will apply to your default Cloud Firestore database. If you create multiple databases for your project, you can deploy Cloud Firestore Security Rules for each database.

  8. Click Create.

When you enable Cloud Firestore , it also enables the API in the Cloud API Manager .

Set up your development environment

Add the required dependencies and client libraries to your app.

Node.js
  1. Add the Firebase Admin SDK to your app:
     npm 
      
     install 
      
     firebase 
     - 
     admin 
      
     -- 
     save 
    
  2. Follow the instructions below to initialize Cloud Firestore with the proper credentials in your environment.
Python
  1. Add the Firebase Admin SDK to your Python app:
     pip 
     install 
     -- 
     upgrade 
     firebase 
     - 
     admin 
    
  2. Follow the instructions below to initialize Cloud Firestore with the proper credentials in your environment.
Java
  1. Add the Firebase Admin SDK to your app:
    • Using Gradle:
       implementation 
        
       ' 
       com 
       . 
       google 
       . 
       firebase 
       : 
       firebase 
       - 
       admin 
       : 
       9.8.0 
       ' 
      
    • Using Maven:
      < dependency 
       > 
        
      < groupId 
       > 
       com 
       . 
       google 
       . 
       firebase 
      < / 
       groupId 
       > 
        
      < artifactId 
       > 
       firebase 
       - 
       admin 
      < / 
       artifactId 
       > 
        
      < version 
       > 
       9.8.0 
      < / 
       version 
       > 
      < / 
       dependency 
       > 
        
      
  2. Follow the instructions below to initialize Cloud Firestore with the proper credentials in your environment.

Initialize Cloud Firestore

Initialize an instance of Cloud Firestore :

Node.js
The Cloud Firestore SDK is initialized in different ways depending on your environment. Below are the most common methods. For a complete reference, see Initialize the Admin SDK .
  • Initialize on Cloud Functions
     const 
      
     { 
      
     initializeApp 
     , 
      
     applicationDefault 
     , 
      
     cert 
      
     } 
      
     = 
      
     require 
     ( 
     'firebase-admin/app' 
     ); 
     const 
      
     { 
      
     getFirestore 
     , 
      
     Timestamp 
     , 
      
     FieldValue 
     , 
      
     Filter 
      
     } 
      
     = 
      
     require 
     ( 
     'firebase-admin/firestore' 
     ); 
    
     initializeApp 
     (); 
     const 
      
     db 
      
     = 
      
     getFirestore 
     (); 
      
    
  • Initialize on Google Cloud
     const 
      
     { 
      
     initializeApp 
     , 
      
     applicationDefault 
     , 
      
     cert 
      
     } 
      
     = 
      
     require 
     ( 
     'firebase-admin/app' 
     ); 
     const 
      
     { 
      
     getFirestore 
     , 
      
     Timestamp 
     , 
      
     FieldValue 
     , 
      
     Filter 
      
     } 
      
     = 
      
     require 
     ( 
     'firebase-admin/firestore' 
     ); 
    
     initializeApp 
     ({ 
      
     credential 
     : 
      
     applicationDefault 
     () 
     }); 
     const 
      
     db 
      
     = 
      
     getFirestore 
     (); 
      
    
  • Initialize on your own server

    To use the Firebase Admin SDK on your own server (or any other Node.js environment), use a service account . Go to IAM & admin > Service accounts in the Google Cloud console. Generate a new private key and save the JSON file. Then use the file to initialize the SDK:

     const 
      
     { 
      
     initializeApp 
     , 
      
     applicationDefault 
     , 
      
     cert 
      
     } 
      
     = 
      
     require 
     ( 
     'firebase-admin/app' 
     ); 
     const 
      
     { 
      
     getFirestore 
     , 
      
     Timestamp 
     , 
      
     FieldValue 
     , 
      
     Filter 
      
     } 
      
     = 
      
     require 
     ( 
     'firebase-admin/firestore' 
     ); 
    
     const 
      
     serviceAccount 
      
     = 
      
     require 
     ( 
     './path/to/serviceAccountKey.json' 
     ); 
     initializeApp 
     ({ 
      
     credential 
     : 
      
     cert 
     ( 
     serviceAccount 
     ) 
     }); 
     const 
      
     db 
      
     = 
      
     getFirestore 
     (); 
      
    
Python
The Cloud Firestore SDK is initialized in different ways depending on your environment. Below are the most common methods. For a complete reference, see Initialize the Admin SDK .
  • Initialize on Google Cloud
     import 
      
     firebase_admin 
     from 
      
     firebase_admin 
      
     import 
     firestore 
     # Application Default credentials are automatically created. 
     app 
     = 
     firebase_admin 
     . 
     initialize_app 
     () 
     db 
     = 
     firestore 
     . 
     client 
     () 
      
    

    An existing application default credential can also be used to initialize the SDK.

     import 
      
     firebase_admin 
     from 
      
     firebase_admin 
      
     import 
     credentials 
     from 
      
     firebase_admin 
      
     import 
     firestore 
     # Use the application default credentials. 
     cred 
     = 
     credentials 
     . 
     ApplicationDefault 
     () 
     firebase_admin 
     . 
     initialize_app 
     ( 
     cred 
     ) 
     db 
     = 
     firestore 
     . 
     client 
     () 
      
    
  • Initialize on your own server

    To use the Firebase Admin SDK on your own server, use a service account .

    Go to IAM & admin > Service accounts in the Google Cloud console. Generate a new private key and save the JSON file. Then use the file to initialize the SDK:

     import 
      
     firebase_admin 
     from 
      
     firebase_admin 
      
     import 
     credentials 
     from 
      
     firebase_admin 
      
     import 
     firestore 
     # Use a service account. 
     cred 
     = 
     credentials 
     . 
     Certificate 
     ( 
     'path/to/serviceAccount.json' 
     ) 
     app 
     = 
     firebase_admin 
     . 
     initialize_app 
     ( 
     cred 
     ) 
     db 
     = 
     firestore 
     . 
     client 
     () 
      
    
  • Java
    The Cloud Firestore SDK is initialized in different ways depending on your environment. Below are the most common methods. For a complete reference, see Initialize the Admin SDK .
  • Initialize on Google Cloud
     import 
      
     com.google.auth.oauth2.GoogleCredentials 
     ; 
     import 
      
     com.google.cloud.firestore.Firestore 
     ; 
     import 
      
     com.google.firebase.FirebaseApp 
     ; 
     import 
      
     com.google.firebase.FirebaseOptions 
     ; 
     // Use the application default credentials 
     GoogleCredentials 
      
     credentials 
      
     = 
      
     GoogleCredentials 
     . 
     getApplicationDefault 
     (); 
     FirebaseOptions 
      
     options 
      
     = 
      
     new 
      
     FirebaseOptions 
     . 
     Builder 
     () 
      
     . 
     setCredentials 
     ( 
     credentials 
     ) 
      
     . 
     setProjectId 
     ( 
     projectId 
     ) 
      
     . 
     build 
     (); 
     FirebaseApp 
     . 
     initializeApp 
     ( 
     options 
     ); 
     Firestore 
      
     db 
      
     = 
      
     FirestoreClient 
     . 
     getFirestore 
     (); 
    
  • Initialize on your own server

    To use the Firebase Admin SDK on your own server, use a service account .

    Go to IAM & admin > Service accounts in the Google Cloud console. Generate a new private key and save the JSON file. Then use the file to initialize the SDK:

     import 
      
     com.google.auth.oauth2.GoogleCredentials 
     ; 
     import 
      
     com.google.cloud.firestore.Firestore 
     ; 
     import 
      
     com.google.firebase.FirebaseApp 
     ; 
     import 
      
     com.google.firebase.FirebaseOptions 
     ; 
     // Use a service account 
     InputStream 
      
     serviceAccount 
      
     = 
      
     new 
      
     FileInputStream 
     ( 
     " path/to/serviceAccount.json 
    " 
     ); 
     GoogleCredentials 
      
     credentials 
      
     = 
      
     GoogleCredentials 
     . 
     fromStream 
     ( 
     serviceAccount 
     ); 
     FirebaseOptions 
      
     options 
      
     = 
      
     new 
      
     FirebaseOptions 
     . 
     Builder 
     () 
      
     . 
     setCredentials 
     ( 
     credentials 
     ) 
      
     . 
     build 
     (); 
     FirebaseApp 
     . 
     initializeApp 
     ( 
     options 
     ); 
     Firestore 
      
     db 
      
     = 
      
     FirestoreClient 
     . 
     getFirestore 
     (); 
    
  • Add data using Core operations

    In order to explore Core operations and Pipeline operations for querying data, add data to your database using Core operations.

    Cloud Firestore stores data in Documents, which are stored in Collections. Cloud Firestore creates collections and documents implicitly the first time you add data to the document. You don't need to explicitly create collections or documents.

    Create a new collection and a document using the following example code.

    Node.js
      const 
      
     docRef 
      
     = 
      
     db 
     . 
     collection 
     ( 
     'users' 
     ). 
     doc 
     ( 
     'alovelace' 
     ); 
     await 
      
     docRef 
     . 
     set 
     ({ 
      
     first 
     : 
      
     'Ada' 
     , 
      
     last 
     : 
      
     'Lovelace' 
     , 
      
     born 
     : 
      
     1815 
     }); 
      
     
    
    Java
      DocumentReference 
      
     docRef 
      
     = 
      
     db 
     . 
     collection 
     ( 
     "users" 
     ). 
     document 
     ( 
     "alovelace" 
     ); 
     // Add document data  with id "alovelace" using a hashmap 
     Map<String 
     , 
      
     Object 
    >  
     data 
      
     = 
      
     new 
      
     HashMap 
    <> (); 
     data 
     . 
     put 
     ( 
     "first" 
     , 
      
     "Ada" 
     ); 
     data 
     . 
     put 
     ( 
     "last" 
     , 
      
     "Lovelace" 
     ); 
     data 
     . 
     put 
     ( 
     "born" 
     , 
      
     1815 
     ); 
     //asynchronously write data 
     ApiFuture<WriteResult> 
      
     result 
      
     = 
      
     docRef 
     . 
     set 
     ( 
     data 
     ); 
     // ... 
     // result.get() blocks on response 
     System 
     . 
     out 
     . 
     println 
     ( 
     "Update time : " 
      
     + 
      
     result 
     . 
     get 
     (). 
     getUpdateTime 
     ()); 
      
     
    
    Python
      doc_ref 
     = 
     db 
     . 
     collection 
     ( 
     "users" 
     ) 
     . 
     document 
     ( 
     "alovelace" 
     ) 
     doc_ref 
     . 
     set 
     ({ 
     "first" 
     : 
     "Ada" 
     , 
     "last" 
     : 
     "Lovelace" 
     , 
     "born" 
     : 
     1815 
     }) 
      
     
    

    Read data using Core operations

    Use the data viewer in the Firebase console to quickly verify that you've added data to Cloud Firestore .

    You can also use the "get" method to retrieve the entire collection.

    Node.js
      const 
      
     snapshot 
      
     = 
      
     await 
      
     db 
     . 
     collection 
     ( 
     'users' 
     ). 
     get 
     (); 
     snapshot 
     . 
     forEach 
     (( 
     doc 
     ) 
      
     = 
    >  
     { 
      
     console 
     . 
     log 
     ( 
     doc 
     . 
     id 
     , 
      
     '=>' 
     , 
      
     doc 
     . 
     data 
     ()); 
     }); 
      
     
    
    Python
     users_ref 
     = 
     db 
     . 
     collection 
     ( 
     "users" 
     ) 
     docs 
     = 
     users_ref 
     . 
     stream 
     () 
     for 
     doc 
     in 
     docs 
     : 
     print 
     ( 
     f 
     " 
     { 
     doc 
     . 
     id 
     } 
     => 
     { 
     doc 
     . 
     to_dict 
     () 
     } 
     " 
     ) 
      
    
    Java
      // asynchronously retrieve all users 
     ApiFuture<QuerySnapshot> 
      
     query 
      
     = 
      
     db 
     . 
     collection 
     ( 
     "users" 
     ). 
     get 
     (); 
     // ... 
     // query.get() blocks on response 
     QuerySnapshot 
      
     querySnapshot 
      
     = 
      
     query 
     . 
     get 
     (); 
     List<QueryDocumentSnapshot> 
      
     documents 
      
     = 
      
     querySnapshot 
     . 
     getDocuments 
     (); 
     for 
      
     ( 
     QueryDocumentSnapshot 
      
     document 
      
     : 
      
     documents 
     ) 
      
     { 
      
     System 
     . 
     out 
     . 
     println 
     ( 
     "User: " 
      
     + 
      
     document 
     . 
     getId 
     ()); 
      
     System 
     . 
     out 
     . 
     println 
     ( 
     "First: " 
      
     + 
      
     document 
     . 
     getString 
     ( 
     "first" 
     )); 
      
     if 
      
     ( 
     document 
     . 
     contains 
     ( 
     "middle" 
     )) 
      
     { 
      
     System 
     . 
     out 
     . 
     println 
     ( 
     "Middle: " 
      
     + 
      
     document 
     . 
     getString 
     ( 
     "middle" 
     )); 
      
     } 
      
     System 
     . 
     out 
     . 
     println 
     ( 
     "Last: " 
      
     + 
      
     document 
     . 
     getString 
     ( 
     "last" 
     )); 
      
     System 
     . 
     out 
     . 
     println 
     ( 
     "Born: " 
      
     + 
      
     document 
     . 
     getLong 
     ( 
     "born" 
     )); 
     } 
      
     
    

    Read data using Pipeline operations

    Now you can compare the Pipeline query experience with the Core query experience.

    Node.js
     const 
      
     readDataPipeline 
      
     = 
      
     db 
     . 
     pipeline 
     () 
      
     . 
     collection 
     ( 
     "users" 
     ); 
     // Execute the pipeline and handle the result 
     try 
      
     { 
      
     const 
      
     querySnapshot 
      
     = 
      
     await 
      
     readDataPipeline 
     . 
     execute 
     (); 
      
     querySnapshot 
     . 
     results 
     . 
     forEach 
     (( 
     result 
     ) 
      
     = 
    >  
     { 
      
     console 
     . 
     log 
     ( 
     ` 
     ${ 
     result 
     . 
     id 
     } 
     => 
     ${ 
     result 
     . 
     data 
     () 
     } 
     ` 
     ); 
      
     }); 
     } 
      
     catch 
      
     ( 
     error 
     ) 
      
     { 
      
     console 
     . 
     error 
     ( 
     "Error getting documents: " 
     , 
      
     error 
     ); 
     } 
      
    
    Python
     pipeline 
     = 
     client 
     . 
     pipeline 
     () 
     . 
     collection 
     ( 
     "users" 
     ) 
     for 
     result 
     in 
     pipeline 
     . 
     execute 
     (): 
     print 
     ( 
     f 
     " 
     { 
     result 
     . 
     id 
     } 
     => 
     { 
     result 
     . 
     data 
     () 
     } 
     " 
     ) 
      
    
    Java
     Pipeline 
      
     pipeline 
      
     = 
      
     firestore 
     . 
     pipeline 
     (). 
     collection 
     ( 
     "users" 
     ); 
     ApiFuture<Pipeline 
     . 
     Snapshot 
    >  
     future 
      
     = 
      
     pipeline 
     . 
     execute 
     (); 
     for 
      
     ( 
     com 
     . 
     google 
     . 
     cloud 
     . 
     firestore 
     . 
     PipelineResult 
      
     result 
      
     : 
      
     future 
     . 
     get 
     (). 
     getResults 
     ()) 
      
     { 
      
     System 
     . 
     out 
     . 
     println 
     ( 
     result 
     . 
     getId 
     () 
      
     + 
      
     " => " 
      
     + 
      
     result 
     . 
     getData 
     ()); 
     } 
     // or, asynchronously 
     pipeline 
     . 
     execute 
     ( 
      
     new 
      
     ApiStreamObserver<com 
     . 
     google 
     . 
     cloud 
     . 
     firestore 
     . 
     PipelineResult 
    > () 
      
     { 
      
     @Override 
      
     public 
      
     void 
      
     onNext 
     ( 
     com 
     . 
     google 
     . 
     cloud 
     . 
     firestore 
     . 
     PipelineResult 
      
     result 
     ) 
      
     { 
      
     System 
     . 
     out 
     . 
     println 
     ( 
     result 
     . 
     getId 
     () 
      
     + 
      
     " => " 
      
     + 
      
     result 
     . 
     getData 
     ()); 
      
     } 
      
     @Override 
      
     public 
      
     void 
      
     onError 
     ( 
     Throwable 
      
     t 
     ) 
      
     { 
      
     System 
     . 
     err 
     . 
     println 
     ( 
     t 
     ); 
      
     } 
      
     @Override 
      
     public 
      
     void 
      
     onCompleted 
     () 
      
     { 
      
     System 
     . 
     out 
     . 
     println 
     ( 
     "done" 
     ); 
      
     } 
      
     }); 
      
    

    Next steps

    Deepen your knowledge of Core and Pipeline operations with the following topics:

    Create a Mobile Website
    View Site in Mobile | Classic
    Share by: