4

假设我们有一个用于 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).

而且我不知道如何过滤这两个子句。

注意:在 MongoDB 中,我们这样做:

db.userdetails.find({"date_of_join" : "16/10/2010","education":"M.C.A."})
4

3 回答 3

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);
于 2013-03-25T21:58:12.667 回答
1

在 IndexedDB 中查询多个索引有两种方法。Josh 描述了使用复合索引查询多个字段的最快方法。然而,它有存储成本和减慢写入速度。此外,查询必须是先验已知的,因此根据需要创建索引。第二种方法是使用排序合并或其他算法手动键连接。这种方法需要对感兴趣的字段进行索引(不是复合的),并且可以进行所有组合查询。请参阅此处http://dev.yathit.com/ydn-db/nosql-query.html以了解 ydn-db 库中的排序合并、嵌套循环和之字形合并实现。我参加添加更多的关键加入算法。

顺便说一句,通常我们不索引布尔值。如果您的查询字段是布尔数据类型,只需进行表扫描。不指向使用索引。

于 2013-03-26T05:05:06.323 回答
-4

为此,您将需要索引,并且您可以使用可以提供一个过滤器的游标来检索数据。

在我的博客(http://www.kristofdegrave.be/2012/01/indexed-db-reading-multiple-records.html?m=1)上,您可以找到有关它的更多信息。

于 2012-11-22T18:55:16.880 回答