簡體   English   中英

在dexie.js中使用具有布爾類型的字段

[英]using a field with a Boolean type in dexie.js

按值true選擇不起作用。 請告訴我是什么問題?

const db = new Dexie('ToDo_DB');

db.version(1).stores({
    list: '++id, task, dateTime, done'
});

db.list.clear();

db.list.add({task: "1 task", dateTime: Date.now(), done: true});
db.list.add({task: "2 task", dateTime: Date.now(), done: false});
db.list.add({task: "3 task", dateTime: Date.now(), done: true});
db.list.add({task: "4 task", dateTime: Date.now(), done: false});

db.list.where('done').equals(false).each(function(item) {
    console.log('Found: ' + item.task + ' with date ' + item.dateTime);
});

布爾值無法在Dexie中建立索引。 參見文檔: https ://dexie.org/docs/Indexable-Type

可以對以下javascript類型進行索引:

  • 日期
  • 字符串,數字,日期或它們的混合數組。
  • ArrayBuffer(僅限IndexedDB 2.0)
  • 類型化數組(僅適用於IndexedDB 2.0)

請注意,所有其他類型都是不可索引的,包括:

  • 布爾值
  • 未定義
  • 賓語
  • 空值

我目前正在嘗試尋找一種更好的替代方法,但是一個簡單的解決方案是使用0 = false和1 = true的數字。 這樣的好處是您仍然可以依靠數據庫的索引來執行查詢:

const db = new Dexie('ToDo_DB');

db.version(1).stores({
    list: '++id, task, dateTime, done'
});

db.list.clear();

db.list.add({task: "1 task", dateTime: Date.now(), done: 1});
db.list.add({task: "2 task", dateTime: Date.now(), done: 0});
db.list.add({task: "3 task", dateTime: Date.now(), done: 1});
db.list.add({task: "4 task", dateTime: Date.now(), done: 0});

db.list.where('done').equals(0).each(function(item) {
    console.log('Found: ' + item.task + ' with date ' + item.dateTime);
});

如果您的存儲中沒有太多數據並且不需要索引,則可以使用自己的filter()函數,例如:

const db = new Dexie('ToDo_DB');

db.version(1).stores({
    list: '++id, task, dateTime, done'
});

db.list.clear();

db.list.add({task: "1 task", dateTime: Date.now(), done: true});
db.list.add({task: "2 task", dateTime: Date.now(), done: false});
db.list.add({task: "3 task", dateTime: Date.now(), done: true});
db.list.add({task: "4 task", dateTime: Date.now(), done: false});

db.list.filter(e => e.done === false).each(function(item) {
    console.log('Found: ' + item.task + ' with date ' + item.dateTime);
});

如果您有大對象(帶有斑點)或很多記錄,那么這可能不是一個非常有效的選擇。 您應該改用索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM