簡體   English   中英

使用 Dexie.js 編寫多個 where 條件

[英]Write multiple where condition using Dexie.js

如何使用 Dexie.js 編寫如下的 where 條件?

field1=0 AND field2!='test' AND field3 IN(1,2,3,4)

我試過這個,但我得到了一個錯誤......

.where('field1').equals(0).and('field2').notEquals('test').and('field3').anyOf([1,2,3,4]).toArray()

我想是因為".and"方法僅適用於 function。 但是,如果我必須編寫具有不同類型條件的多個 where 條件(例如: equalsnotEqualsanyOf )......我該怎么做?

感謝您的支持,提前致謝

Collection.and() 與 Collection.filter() 相同,並接受 JS 回調。

原因是一個索引只能用於一個標准。 典型的 SQL 數據庫具有相同的限制,但它具有一些智能策略(查詢計划),試圖找出用於索引查找的字段以及用於手動過濾結果的字段。 Dexie 沒有查詢計划,因此您需要自己執行該邏輯。

對於將 equals 過濾器與另一個過濾器組合的情況,復合索引也可用於獲得更有效的 AND 查詢。

因此,作為示例,我們可以使用您的確切示例並將其轉換為使用 dexie 查詢的最佳方式:

const db = new Dexie("multipleCriteriasSample");
db.version(1).stores({
  someTable: 'id, [field1+field3]'
});

function doTheQuery() {
  return db.someTable.where('[field1+field3]').anyOf([
    [0, 1],
    [0, 2],
    [0, 3],
    [0, 4]
  ]).and(item => item.field2 !== "test");
}

上面的邏輯是這樣的:

field1 是一個 equals 運算符 - 如果我們將它放在復合索引 ('[field1+field3]') 中,它可以與另一個標准結合起來 field2 是一個 notEqual ,它通常不會有任何使用索引的好處 - 所以過濾它使用 and() 方法。 field3 是一個 anyOf()。 使用復合索引並執行單個 anyOf()。

暫無
暫無

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

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