0
0
FirebaseHow-ToBeginner · 4 min read

How to Use Custom Metadata Storage in Firebase

To use custom metadata storage in Firebase, store your metadata as fields in Firestore documents or Realtime Database nodes. You create a structured object with your custom data and save it under a specific path, then read or update it as needed using Firebase SDK methods.
📐

Syntax

In Firebase, custom metadata is stored as key-value pairs inside documents (Firestore) or nodes (Realtime Database). You define a path, then use set() or update() to save your metadata object.

  • collection('yourCollection'): selects the collection
  • doc('yourDocId'): selects the document
  • set(data): writes data, replacing existing
  • update(data): updates specific fields
javascript
const metadata = {
  createdBy: 'user123',
  createdAt: new Date().toISOString(),
  tags: ['firebase', 'metadata'],
  customField: 'customValue'
};

// Firestore syntax
firestore.collection('items').doc('item1').set(metadata);

// Realtime Database syntax
realtimeDb.ref('items/item1/metadata').set(metadata);
💻

Example

This example shows how to save and read custom metadata for an item in Firestore using Firebase JavaScript SDK.

javascript
import { initializeApp } from 'firebase/app';
import { getFirestore, doc, setDoc, getDoc } from 'firebase/firestore';

const firebaseConfig = {
  apiKey: 'YOUR_API_KEY',
  authDomain: 'YOUR_AUTH_DOMAIN',
  projectId: 'YOUR_PROJECT_ID'
};

const app = initializeApp(firebaseConfig);
const firestore = getFirestore(app);

async function saveMetadata() {
  const metadata = {
    createdBy: 'user123',
    createdAt: new Date().toISOString(),
    tags: ['firebase', 'metadata'],
    customField: 'customValue'
  };

  await setDoc(doc(firestore, 'items', 'item1'), metadata);
  console.log('Metadata saved');
}

async function readMetadata() {
  const docRef = doc(firestore, 'items', 'item1');
  const docSnap = await getDoc(docRef);

  if (docSnap.exists()) {
    console.log('Metadata:', docSnap.data());
  } else {
    console.log('No metadata found');
  }
}

saveMetadata().then(() => readMetadata());
Output
Metadata saved Metadata: { createdBy: 'user123', createdAt: '2024-06-01T12:00:00.000Z', tags: ['firebase', 'metadata'], customField: 'customValue' }
⚠️

Common Pitfalls

Common mistakes when using custom metadata storage in Firebase include:

  • Overwriting existing data unintentionally by using set() without { merge: true }.
  • Not handling asynchronous calls properly, leading to race conditions.
  • Storing large or complex objects that exceed Firestore document size limits.
  • Not validating or sanitizing metadata before saving.
javascript
/* Wrong: overwrites entire document */
firestore.collection('items').doc('item1').set({ newField: 'value' });

/* Right: merges new field with existing data */
firestore.collection('items').doc('item1').set({ newField: 'value' }, { merge: true });
📊

Quick Reference

ActionMethodDescription
Save metadataset(docRef, data)Writes data to a document, replaces existing unless merged
Update metadataupdate(docRef, data)Updates specific fields without overwriting whole document
Read metadataget(docRef)Retrieves document data including metadata
Merge dataset(docRef, data, { merge: true })Merges new data with existing document fields

Key Takeaways

Store custom metadata as fields inside Firestore documents or Realtime Database nodes.
Use set() with { merge: true } to avoid overwriting existing data unintentionally.
Always handle asynchronous calls with async/await or promises to ensure data consistency.
Keep metadata size within Firestore limits and validate data before saving.
Read metadata using get() to access stored custom fields easily.