Failed to initialize database service: [_FirebaseError: Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore]
Don’t worry! This issue is common when working with Firestore in Firebase, especially in Firebase SDK version 9+ (modular syntax). Let’s break down the causes and how to fix them.
🚀 Understanding the Error
The error occurs when calling collection() with an incorrect argument. In Firebase Firestore, the collection() function requires a Firestore instance as the first argument. If you pass a string directly, Firestore won’t recognize it.
🔎 Common Causes & Fixes
1️⃣ Firestore Not Initialized Correctly
If Firestore isn’t initialized properly, it won’t recognize your database instance. Make sure you’ve initialized Firebase and Firestore correctly:
✅ Correct Way (Firebase v9+)
import { initializeApp } from "firebase/app";
import { getFirestore, collection, getDocs } from "firebase/firestore";
// Your Firebase configuration
const firebaseConfig = {
apiKey: "your-api-key",
authDomain: "your-app.firebaseapp.com",
projectId: "your-project-id",
storageBucket: "your-app.appspot.com",
messagingSenderId: "your-messaging-sender-id",
appId: "your-app-id"
};
// Initialize Firebase and Firestore
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);
❌ Incorrect Usage
const usersRef = collection("users"); // ❌ Missing Firestore instance
✅ Correct Usage
const usersRef = collection(db, "users"); // ✅ Pass Firestore instance (db)
2️⃣ Incorrect Import Statements
With Firebase v9+, you must use the modular import syntax. If you’re using the older syntax (firebase.firestore()), update your imports.
✅ Correct Import for Firestore v9+
import { getFirestore, collection } from "firebase/firestore";
❌ Incorrect Import (Old Syntax)
import firebase from "firebase"; // ❌ Deprecated in Firebase v9+
3️⃣ Firestore Not Enabled in Firebase Console
If Firestore isn’t enabled in your Firebase project, it won’t work.
🔧 Fix:
- Go to Firebase Console.
- Select your project.
- Navigate to Firestore Database in the left menu.
- Click Create Database and choose a security mode.
4️⃣ Using Firestore Methods Before Firebase is Initialized
Ensure Firebase is initialized before using Firestore. If you’re trying to access collection() before calling initializeApp(), you’ll get this error.
✅ Solution
const app = initializeApp(firebaseConfig);
const db = getFirestore(app); // Firestore should be initialized after Firebase
const usersRef = collection(db, "users"); // Now it's safe to use
5️⃣ Incorrect Async Handling (React or Next.js)
If you’re using Firebase inside a React or Next.js app, make sure you initialize Firebase inside useEffect() or in the right lifecycle method.
✅ For React
import { useEffect, useState } from "react";
import { initializeApp } from "firebase/app";
import { getFirestore, collection, getDocs } from "firebase/firestore";
const firebaseConfig = { /* Your Firebase config */ };
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);
function App() {
const [users, setUsers] = useState([]);
useEffect(() => {
const fetchUsers = async () => {
const usersRef = collection(db, "users");
const snapshot = await getDocs(usersRef);
setUsers(snapshot.docs.map(doc => doc.data()));
};
fetchUsers();
}, []);
return <div>Users Loaded: {users.length}</div>;
}
✅ Final Checklist
🔲 Ensure Firebase is initialized before calling Firestore methods.
🔲 Pass the Firestore instance (db) as the first argument in collection().
🔲 Use modular imports (getFirestore(), collection()) instead of old Firebase syntax.
🔲 Check if Firestore is enabled in the Firebase Console.
🔲 Handle async functions properly in React or Next.js.
🎯 Conclusion
By following these steps, you should be able to fix the “Expected first argument to collection()…” error and use Firestore properly in your app. If you’re still facing issues, check your Firebase configuration and ensure everything is correctly imported.
🔥 Happy Coding! 🚀