在我的收藏中,我说了以下结构
{
_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"}}
可以调整索引吗?
此外,使用其中一种还有其他优点/缺点吗?
答案 0 :(得分:0)
我会采用第一种方法。快速阅读MongoDB的文档,声明如下:
MongoDB使用点表示法来访问数组的元素并访问嵌入文档的字段。
请参阅MongoDB Dot Notation和Query on Embedded/Nested Documents。
关于调整索引,你可以index the embedded document as a whole:
db.myColl.createIndex({ "a": 1 });
但如果您只需要索引特定属性,我就不会看到这样做的原因。我会对Index Size敏感,特别是如果该属性将持有大量数据。