MongoDB的docs解释了多键索引。请考虑此comment
文档。
{
"_id": ObjectId(...)
"title": "Grocery Quality"
"comments": [
{ author_id: ObjectId(...)
date: Date(...)
text: "Please expand the cheddar selection." },
{ author_id: ObjectId(...)
date: Date(...)
text: "Please expand the mustard selection." },
{ author_id: ObjectId(...)
date: Date(...)
text: "Please expand the olive selection." }
]
}
文档解释说,可以在comments.text
或任何comments
字段上编制索引。 但是,是否可以对comments
密钥本身进行索引?
此post演示了对字符串数组的索引,但上述comments
字段是 JSON对象数组。
基于Antoine Girbal的article,似乎可以在JSON对象数组上进行索引,其中每个JSON对象具有不同的键名。但是,似乎不可能数组中的每个JSON对象共享相同的键名称。
答案 0 :(得分:2)
是的,你可以index subdocuments,它们可以在多键索引中。索引整个子文档时,它只会在搜索整个文档时匹配,例如:
db.test.find({records: {hair: "brown"}})
搜索与records
文档完全匹配的{hair: "brown"}
,并且可以使用索引查找文档。
如果您想查找任何包含hair="brown"
的子文档和任何其他字段,则需要dot notation,例如:
db.test.find({"records.hair": "brown"})
但是,没有用于此的索引 - 因此它是一个全表扫描。
请注意:index size有一些限制,整个文档很容易超过这个数量。