3

假设我的商店中有 3 个条目

{
  category: "Science",
  author: "Charles Darwin",
  content: "Lorem ipsum dolor..."
}

{
  category: "Science",
  author: "Albert Einstein",
  content: "sit amet..."
}

{
  category: "Philosophy",
  author: "Albert Einstein",
  content: "consectetur adipisicing elit..."
}
  • "where category = 'Science'"是否可以在不创建类别索引的情况下获取所有条目?
  • 是否有可能获得所有条目"where category = 'Science' AND author = 'Albert Einstein'"
  • 是否可以获得包含单词"Lorem"是内容字段的所有条目?
  • 或者我应该为这些类型的查询使用不同的数据库
4

1 回答 1

1

是否可以在不创建类别索引的情况下获取所有条目“where category = 'Science'”?

是的:只需遍历整个对象存储并手动查找具有该类别的对象。即使您编写了一些方便的函数来轻松完成此操作,与使用索引相比仍然会很慢。所以在实践中,你会想在那里使用索引。

是否可以获得所有条目“其中类别 = 'Science' AND author = 'Albert Einstein'”?

是的,您可以使用此处问题中所述的“复合索引” 。但是,最大的警告是 IE10 不支持它。如果这对您的应用程序来说是个问题,那么您只能对单个字段进行索引。对于除一个索引字段之外的任何其他约束,您必须遍历所有结果并手动比较。在 IndexedDB 之上构建了各种库,旨在使这更容易,但我没有使用它们中的任何一个,所以我无法帮助你。无论哪种方式,如果你不能使用复合索引,它会很慢。

是否可以获得包含单词“Lorem”的所有条目是内容字段?

您可能会注意到这里的模式......是的:只需遍历整个对象存储并手动查找内容字段中带有“Lorem”的对象。全文搜索没有内置的特殊支持。从理论上讲,可以想象一个建立在 IndexedDB 之上的全文搜索 API(只需跟踪所有单词),但我不确定是否有人已经构建了它(如果他们已经构建了它,我不确定如何构建它)表现将是)。

或者我应该为这些类型的查询使用不同的数据库

如果你需要做很多这样的查询(或者,上帝保佑,更复杂的查询)并且你可以选择使用不同的数据库,那么使用不同的数据库。但是您可能没有该选项,具体取决于您要完成的工作。

于 2013-07-19T02:58:36.333 回答