MongoDB在排序阶段不使用复合索引

MongoDB在排序阶段不使用复合索引,mongodb,indexing,Mongodb,Indexing,我有一个集合,并指定了一个复合索引。索引用于过滤,但是排序是在内存中完成的,我不知道为什么 我有以下文件: { _id :1, accountId: 1234566, positionId: 9090, eventDateTime: "2021-01-02T09:38:45", nonce: 1415, event: { symbol: "value1" } } 我使用的索引是 db.data.createIndex({

我有一个集合,并指定了一个复合索引。索引用于过滤,但是排序是在内存中完成的,我不知道为什么

我有以下文件:

{ _id :1, 
  accountId: 1234566,
  positionId: 9090,
  eventDateTime: "2021-01-02T09:38:45",
  nonce: 1415,
  event: {
    symbol: "value1"
  }
}
我使用的索引是

db.data.createIndex({"accountId" : 1, "positionId" : 1, "event.symbol" : 1, eventDateTime: -1, "nonce": -1})
我的问题是

db.data.find({"accountId" : 123456, "positionId" : 9090, "event.symbol": { $in :["value1" , "value2", "value3"]}).sort({"eventDateTime" :-1, "nonce": -1})
使用explain后,我得到以下计划(缩写):

对我来说,奇怪的是,如果使用索引:

 db.data.createIndex({"accountId" : 1, "positionId" : 1, eventDateTime: -1, "nonce": -1})
在同一查询中,不会在内存中执行排序。 我很难理解发生了什么以及第一个索引不起作用的原因。任何帮助都将不胜感激

之后,我还将索引更改为

db.data.createIndex({"accountId" : 1, "positionId" : 1,  eventDateTime: -1, "nonce": -1, "event.symbol" : 1,})

为了匹配ESR建议,排序也在内存中执行

这是否回答了您的问题?在解释的计划部分中,它显示了“多键路径”的哪些内容?请参阅本文,并讨论了如何将复合索引与筛选器+排序查询结合使用:
db.data.createIndex({"accountId" : 1, "positionId" : 1,  eventDateTime: -1, "nonce": -1, "event.symbol" : 1,})