与$ in查询配合使用时,MongoDB排序性能

时间:2019-06-25 10:31:54

标签: mongodb sorting

我的数据库中有一个收藏集product。以下是一个示例文档:

{
"sku_id":"12345678",
"priduct_name":"milk",
"product_rank":3,
"product_price": 2.4
}

我们的收藏中有10万个这样的独特文档。 我想使用$in查询来查询此集合,如下所示。

db.product.find({"sku_id" :{$in :["12345678","23213"]}}).sort( { product_rank: 1 } )

我们的要求是根据$in查询来搜索文档,并对文档中的任何字段(asc或desc)进行排序。 我已经为此集合的所有字段创建了正向和反向索引。

注意:sku_id查询中的$in数组可以包含1000多个sku_id。

我的疑问是,如果我将$in之类的过滤器与sku_id数组一起使用,并在任何字段上获得排序结果,它将使用索引进行排序还是在查询时进行排序?

1 个答案:

答案 0 :(得分:1)

Mongo允许您确定查询是否将使用索引。当find操作返回一个游标时,您可以扩展方法链以包括一个explain()命令,该命令完全可以满足您的需求。 (建议您使用db.product.find(...).sort(...).explain('executionStats')

  

它将使用索引进行排序还是在查询时进行排序?

将在查询中使用在product_rank上创建的索引,但不会单独在sku_id上使用索引。而是同时使用product_ranksku_id(asc和desc)创建复合索引。