我正在使用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()
答案 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。