我们在某项服务中看到,某些查询总是导致出现COLLSCAN
,而不是使用适当的索引。数据的形式为
{_id: DocumentID, "field": {"child": "Cross-App-ID"}}
带有索引{"field.child":1}
。
运行“field.child”查询,db.collection.find({"field.child":"CA-ID"})
即使用索引时,工作正常。但是,出于某种原因,访问数据库的应用程序将查询创建为db.collection.find({"field":{"child":"CA-ID"}})
,结果为COLLSCAN
而不是IXSCAN
。
对此我有两个疑问:
- 这些查询难道不应该是等效的并且被同等对待吗?
- 如何为第二个用例创建索引?我发现的所有示例都像我们已经做的那样创建了索引。