DexieJS(indexedDB)链多个.where子句

时间:2016-02-28 06:37:25

标签: javascript where-clause indexeddb dexie

我正在使用DexieJS从IndexedDB获取数据。我已经使用v.1.1.0和1.2.0完成了以下测试。

它适用于简单查询,但不幸的是我无法将多个where子句链接起来。

首先,我试过这个

  scope :active, -> { where('reviewed_at NOTNULL and paid_at NOTNULL and end_at >= ?', Date.today) }

这很有效。 然后,我需要添加一个where子句,但只有在设置了给定值的情况下:

var collection = db[table];
collection = collection.where('Field').equals("1");
return collection.count();

这个失败了。出于测试目的,我也尝试过:

var collection = db[table];
collection = collection.where('Field').equals("1");
if(value) collection = collection.where('Field2').above(value);
return collection.count();

这些都不起作用。我开始认为这根本不可能,但由于方法var collection = db[table]; collection = collection.where('Field').equals("1") .and('Field2').above(value); return collection.count(); var collection = db[table]; collection = collection.where('Field').equals("1") .and().where('Field2').above(value); return collection.count(); var collection = db[table]; collection = collection.where('Field').equals("1") .where('Field2').above(value); return collection.count(); 存在,必须有办法!

PS这是有效的:

and()

1 个答案:

答案 0 :(得分:3)

DexieJS' AND运算符可以作为过滤函数或复合索引实现。实现查询的简单方法是使用过滤方法,例如;

var collection = db[table];
collection = collection
    .where('Field').equals("1")
      .and(function(item) { return item.Field2 > value });
return collection.count();

这意味着第一个过滤器将针对IndexedDB运行,并且将针对DexieJS针对每个找到的项运行附加条件,这可能会或可能不足以满足您的需求。

至于如何使用复合索引,如果没有关于所需的集合和确切查询的更多详细信息,则应用于您的确切情况会更加困难,但有much more information available here