假设我们为todolist建立了一个数据库,并希望查询所有重要且尚未完成的项目。在SQL中,我将使用类似
的内容SELECT * FROM todolist WHERE important = true AND state <> 'done'
我们如何在indexeddb nosql数据库中执行该类型的请求? 有索引吗? 其他方式? 不可能?
我知道要在important = true
上过滤结果:
objectstore.index('important').openCursor(IDBKeyRange.only('true'))
但我不知道如何过滤state <> 'done'
,因为我们只有IDBKeyRange.only(z)
。
我不知道如何过滤这两个条款。
N.B。 :在MongoDB中我们做:
db.userdetails.find({"date_of_join" : "16/10/2010","education":"M.C.A."})
答案 0 :(得分:6)
在onupgradeneeded中,为使用数组的条件创建索引:
todolistStore.createIndex('importantIncomplete', ['important','state'],{unique:false});
对于您的查询,请执行以下操作:
var lowerBound = ['true','started'];
var upperBound = ['true','almostdone'];
var range = IDBKeyRange.bound(lowerBound,upperBound);
var request = todolistStore.index('importantIncomplete').openCursor(range);
答案 1 :(得分:1)
在IndexedDB中查询多个索引有两种方法。 Josh描述了使用复合索引查询多个字段的最快方法。但是它存储成本和写入速度变慢。另外,必须先验地查询查询,因此根据需要创建索引。第二种方法是使用排序合并或其他算法的手动密钥连接。此方法需要感兴趣的字段上的索引(非复合)并处理所有组合查询。请参阅此处http://dev.yathit.com/ydn-db/nosql-query.html,了解ydn-db库中的排序合并,嵌套循环和zigzag合并实现。我参加了添加更多关键连接算法。
BTW,通常我们不索引布尔值。如果您的查询字段是布尔数据类型,则只进行表扫描。没有指向使用索引。答案 2 :(得分:-3)
您需要索引,并且可以使用游标检索数据,您可以在其中提供一个过滤器。
在我的博客(http://www.kristofdegrave.be/2012/01/indexed-db-reading-multiple-records.html?m=1)上,您可以找到更多有关它的信息。