缓存 - IndexedDB - Dexie.js

Posted qq3279338858

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存 - IndexedDB - Dexie.js相关的知识,希望对你有一定的参考价值。

Classes

  • Dexie
  • DexieError
  • Collection
  • IndexSpec
  • Promise
  • Table
  • TableSchema
  • Transaction
  • Version
  • WhereClause

Operators & filters

  • WhereClause(表查询时用于索引或主键上的筛选器)
  • Collection(表中数据的操作)

Quick Reference(快速参考)

Declare Database(声明数据库)

var db = new Dexie("MyDatabase");
db.version(1).stores(
    friends: "++id, name, age, *tags",
    gameSessions: "id, score"
);

Schema Syntax(表模式的语法)

  • ++Auto-incremented primary key(自动递增的主键)
  • &Unique(独一无二的索引)
  • *Multi-entry index(值为数组的索引,可以通过数组中的某一项索引)
  • [A+B]Compound index(联合索引?)

Upgrade(升级)

db.version(1).stores(
    friends: "++id,name,age,*tags",
    gameSessions: "id,score"
);

db.version(2).stores(
    friends: "++id, [firstName+lastName], yearOfBirth, *tags", // Change indexes(改变索引)
    gameSessions: null // Delete table(删除表)

).upgrade(tx => 
    // Will only be executed if a version below 2 was installed.(当前浏览器数据库版本低于2时触发)
    return tx.friends.modify(friend => 
        friend.firstName = friend.name.split(' ')[0];
        friend.lastName = friend.name.split(' ')[1];
        friend.birthDate = new Date(new Date().getFullYear() - friend.age, 0);
        delete friend.name;
        delete friend.age;
    );
);

Class Binding(绑定类)

class Friend 
    // Prototype method
    save() 
        return db.friends.put(this); // Will only save own props.
    

    // Prototype property
    get age()  // 这里个get 是类中的一个关键字,new Friend().age时会调用该函数
        return moment(Date.now()).diff (this.birthDate, 'years'); // moment是一个日期处理库
    


db.friends.mapToClass(Friend);

Add Items(添加)

await db.friends.add(name: "Josephine", age: 21);

await db.friends.bulkAdd([
  name: "Foo", age: 31,
  name: "Bar", age: 32
]);

Update Items(更新)

// 根据对象更新
await db.friends.put(id: 4, name: "Foo", age: 33);

await db.friends.bulkPut([
    id: 4, name: "Foo2", age: 34,
    id: 5, name: "Bar2", age: 44
]);

// 根据主键更新
await db.friends.update(4, name: "Bar");

// 根据搜索结果更新
await db.customers
    .where("age")
    .inAnyRange([ [0, 18], [65, Infinity] ])
    .modify(discount: 0.5);

Delete items(删除)

以上是关于缓存 - IndexedDB - Dexie.js的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 dexie.js 添加新条目

相同范围和模式的 Dexie.js 事务是不是并行运行?

在 JavaScript 文件中添加 Dexie.js 查询会提示缺少类型

如何在 Dexie.js 中索引和查询嵌套数组?

Dexie JS - 结合条件过滤器和文本搜索

IndexedDB浏览器本地存储缓存数据库CookieLocal StorageSession StorageWeb SQL