---
title: "How do you iterate over records using a cursor in IndexedDB?"  
description: "How do you iterate over records using a cursor in IndexedDB?"  
author: "Rana Sunny"  
published: 2025-07-03  
updated: 2025-07-03  
canonical: https://www.mindstick.com/interview/34313/how-do-you-iterate-over-records-using-a-cursor-in-indexeddb  
category: "database"  
tags: ["database", "index"]  
reading_time: 4 minutes  

---

# How do you iterate over records using a cursor in IndexedDB?

You can iterate over records in **IndexedDB** using a **cursor**, which allows you to go through each record one-by-one—great for large datasets or conditional processing.

## Basic Syntax for Cursor Iteration

```javascript
const request = indexedDB.open("MyDB", 1);

request.onsuccess = function (event) {
    const db = event.target.result;
    const transaction = db.transaction("users", "readonly");
    const store = transaction.objectStore("users");

    const cursorRequest = store.openCursor(); // You can pass key ranges too

    cursorRequest.onsuccess = function (event) {
        const cursor = event.target.result;
        if (cursor) {
            console.log("Key:", cursor.key, "Value:", cursor.value);

            // Move to next record
            cursor.continue();
        } else {
            console.log("No more entries.");
        }
    };

    cursorRequest.onerror = function (event) {
        console.error("Cursor error:", event.target.error);
    };
};
```

## You Can Use Cursor With:

| Type | Example |
| --- | --- |
| Whole object store | `store.openCursor()` |
| Index | `index.openCursor()` |
| Range query | `store.openCursor(IDBKeyRange.bound(1, 100))` |
| Direction | `store.openCursor(null, 'prev')` |

## Example: Read All Users Where Age > 30

```javascript
store.openCursor().onsuccess = function (event) {
    const cursor = event.target.result;
    if (cursor) {
        const user = cursor.value;
        if (user.age > 30) {
            console.log("User over 30:", user);
        }
        cursor.continue();
    }
};
```

## Cursor Methods

| Method | Purpose |
| --- | --- |
| `cursor.continue()` | Move to next record (default) |
| `cursor.advance(n)` | Skip `n` records |
| `cursor.update(value)` | Update current record |
| `cursor.delete()` | Delete current record |

## Update Record During Iteration

```javascript
if (cursor.value.active === false) {
    const updated = { ...cursor.value, active: true };
    cursor.update(updated);
}
```

## Summary

| Feature | Supported in Cursor |
| --- | --- |
| Loop through all | Yes |
| Filter conditionally | Yes (custom JS logic) |
| Read/write/delete | Yes (in readwrite mode) |
| Performance | Efficient for large data |

## Answers

### Answer by Rana Sunny

You can iterate over records in **IndexedDB** using a **cursor**, which allows you to go through each record one-by-one—great for large datasets or conditional processing.

## Basic Syntax for Cursor Iteration

```javascript
const request = indexedDB.open("MyDB", 1);

request.onsuccess = function (event) {
    const db = event.target.result;
    const transaction = db.transaction("users", "readonly");
    const store = transaction.objectStore("users");

    const cursorRequest = store.openCursor(); // You can pass key ranges too

    cursorRequest.onsuccess = function (event) {
        const cursor = event.target.result;
        if (cursor) {
            console.log("Key:", cursor.key, "Value:", cursor.value);

            // Move to next record
            cursor.continue();
        } else {
            console.log("No more entries.");
        }
    };

    cursorRequest.onerror = function (event) {
        console.error("Cursor error:", event.target.error);
    };
};
```

## You Can Use Cursor With:

| Type | Example |
| --- | --- |
| Whole object store | `store.openCursor()` |
| Index | `index.openCursor()` |
| Range query | `store.openCursor(IDBKeyRange.bound(1, 100))` |
| Direction | `store.openCursor(null, 'prev')` |

## Example: Read All Users Where Age > 30

```javascript
store.openCursor().onsuccess = function (event) {
    const cursor = event.target.result;
    if (cursor) {
        const user = cursor.value;
        if (user.age > 30) {
            console.log("User over 30:", user);
        }
        cursor.continue();
    }
};
```

## Cursor Methods

| Method | Purpose |
| --- | --- |
| `cursor.continue()` | Move to next record (default) |
| `cursor.advance(n)` | Skip `n` records |
| `cursor.update(value)` | Update current record |
| `cursor.delete()` | Delete current record |

## Update Record During Iteration

```javascript
if (cursor.value.active === false) {
    const updated = { ...cursor.value, active: true };
    cursor.update(updated);
}
```

## Summary

| Feature | Supported in Cursor |
| --- | --- |
| Loop through all | Yes |
| Filter conditionally | Yes (custom JS logic) |
| Read/write/delete | Yes (in readwrite mode) |
| Performance | Efficient for large data |


---

Original Source: https://www.mindstick.com/interview/34313/how-do-you-iterate-over-records-using-a-cursor-in-indexeddb

Copyright © MindStick Software Pvt. Ltd. This Markdown version is provided for developers, AI systems, and offline reading.
