使用mongodb搜索多个参数

时间:2013-03-26 16:53:59

标签: mongodb search indexing

如何在不使用外部引擎的情况下使用mongodb进行细粒度搜索?以此对象为例     {       类型:'喜剧',       页数:380,       年:2013年,       畅销书:是的,       作者:' John Doe'     }

正在搜索以下内容:

db.books.find({
  pages:      { '&gt': 100 },
  year:       { '&gt': 2000 },
  bestseller: true,
  author:     "John Doe"
});

到目前为止非常简单。现在假设文档中有更多的值,并且我正在进行更精确的搜索我有一个非常集合。

我要做的第一件事就是创建索引。但是,它是如何工作的?我已经读过这里https://jira.mongodb.org/browse/SERVER-3071中定义的索引交集是不可行的。这意味着如果我将索引设置为" year"和"页面"我不会真正优化搜索中的AND操作。

那么如何针对包含许多参数优化搜索?

提前致谢。

1 个答案:

答案 0 :(得分:0)

好像你问的是compound indexes in mongodb。复合索引允许您在文档中的多个字段上创建单个索引。通过创建复合索引,您可以在仍使用索引的同时进行这些大型/复杂查询。

更一般地说,如果您在具有高度选择性的字段上创建基本索引,则搜索最终会非常快。使用您的示例,如果您有作者索引,查询引擎将使用该索引查找author ==" John Doe"的所有条目。据推测,与整个系列中的书籍数量相比,该特定作者的书籍并不多。因此,即使您的查询的其余部分相当复杂,也只能使用匹配作者对这些少数文档进行评估。因此,通过正确构建索引,您可以获得显着的性能提升,而无需拥有任何复杂的索引。