不同种类的复合索引

sok*_*kse 5 nosql mongodb

我正在搜索一个字段,我想分别对 3 个不同的字段(观看次数、评分、时间)进行排序。我是否正确假设我需要做三个不同的复合索引 {searchField :1, viewcount:1}, {searchField :1, rating:1} 和 {searchField :1, time:1} ?

另外一个查询可以使用 searchField 进行搜索,然后对时间字段进行范围查询和排序,在这种情况下,最后一个索引也是正确的,对吗?

Sql*_*ide 3

您的假设对于排序顺序的一条评论是正确的。确保您的查询排序顺序与索引排序顺序匹配,否则将不会使用索引。请在此处阅读更多详细信息。

考虑一个包含具有用户名和日期字段的文档的集合事件。应用程序可以发出查询,返回的结果首先按用户名值升序排序,然后按日期值降序(即从最近到最后)排序,例如:

db.events.find().sort( { username: 1, date: -1 } )
Run Code Online (Sandbox Code Playgroud)

或返回的结果首先按用户名值降序排序,然后按日期值升序排序的查询,例如:

db.events.find().sort( { username: -1, date: 1 } )
Run Code Online (Sandbox Code Playgroud)

以下索引可以支持这两种排序操作:

db.events.createIndex( { "username" : 1, "date" : -1 } )
Run Code Online (Sandbox Code Playgroud)

但是,上述索引不支持按用户名值升序排序,然后按日期值升序排序,如下所示:

db.events.find().sort( { username: 1, date: 1 } )
Run Code Online (Sandbox Code Playgroud)