未使用嵌套文档的MongoDB索引

时间:2017-04-26 14:39:18

标签: mongodb mongodb-query

在我的收藏中,我说了以下结构

{
  _id: ObjectId("ssxxdfasfsadf"),
  a: {
    b: "somevalue"
  }
}

我已为a.b创建了一个索引,如果我将查询查询用作db.collection.find({"a.b": "someothervalue"}),则该索引正常工作。

如果我将查询更改为db.collection.find({a: {b: "somevalue"}}),则会执行完整的收集扫描。 (来源 - find().explain()

当然,我可以修改我的应用程序以"a.b"进行查询,但我想避免这种情况,因为我a中的其他几个字段,将来我可能会这样做需要查询。

无论如何{a: {b: "somevalue"}}可以调整索引吗?

此外,使用其中一种还有其他优点/缺点吗?

1 个答案:

答案 0 :(得分:0)

我会采用第一种方法。快速阅读MongoDB的文档,声明如下:

  

MongoDB使用点表示法来访问数组的元素并访问嵌入文档的字段。

请参阅MongoDB Dot NotationQuery on Embedded/Nested Documents

关于调整索引,你可以index the embedded document as a whole

db.myColl.createIndex({ "a": 1 });

但如果您只需要索引特定属性,我就不会看到这样做的原因。我会对Index Size敏感,特别是如果该属性将持有大量数据。