整个数组上的多键索引

时间:2013-10-01 19:42:06

标签: mongodb indexing multikey

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对象共享相同的键名称。

示例 - https://gist.github.com/kman007us/6797422

1 个答案:

答案 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有一些限制,整个文档很容易超过这个数量。