考虑这个对象:
{
"_id" : ObjectId("5a3040438c901f42d061edff"),
"TrackingId" : {
"FullValue" : "myRandomValue",
"PrintValue" : "myRandomValue2",
"BarcodeValue" : "myRandomValue3"
}
}
执行以下操作之间有什么区别:
db.myColl.createIndex( { TrackingId: 1 }} )
VS
db.myColl.createIndex( { TrackingId.FullValue : 1 } )
正如您在第一个场景中看到的那样,我正在为整个对象建立索引,因为它很小,我没有遇到任何问题。但是,我也可以索引该对象中的属性。那么我的问题是,这些索引中的哪一个会通过 TrackingId.FullValue 来提高效率,为什么呢?
答案 0 :(得分:1)
基于help文件
请注意 虽然查询可以使用索引,但结果集不包括上面的示例文档。在嵌入文档上执行相等匹配时,字段顺序事项和嵌入文档必须完全匹配。有关查询嵌入文档的详细信息,请参阅查询嵌入式文档。
它表明在整个子文档上创建索引时应该小心,即。 { TrackingId: 1 }
。您的查询顺序很重要,很可能会造成太多混乱。