mongodb高级索引
考虑以下文档中的用户集合:
{
"address": {
"city": "Los Angeles",
"state": "California",
"pincode": "123"
},
"tags": [
"music",
"cricket",
"blogs"
],
"name": "Tom Benzamin"
}
上述文档中包含一个 address 子文档 和 标签数组.
索引数组字段:
假设我们要搜索基于用户文档的标签。对于这一点,我们将在集合中创建一个索引的标签数组。
创建索引在数组上,依次创建它的每个字段的单独索引条目。因此,在我们的例子中,当我们在标签数组创建一个索引,单独将创建 music,cricket和blogs 其值的索引。
要创建标签数组的索引,使用下面的代码:
>db.users.ensureIndex({"tags":1})
在创建索引之后,我们可以像这样在集合中搜索标签字段:
>db.users.find({tags:"cricket"})
要验证正确的索引时,使用以下 explain 命令:
>db.users.find({tags:"cricket"}).explain()
以上的 explain 命令将 "cursor" : "BtreeCursor tags_1" 证实了正确的索引使用。
索引子文档字段:
假设我们要根据城市,州和PIN码字段来搜索文档。由于所有这些字段都是地址子文档字段的一部分,我们将在子文档创建所有字段的索引。
关于子文档的三个字段创建索引,使用下面的代码:
>db.users.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})
一旦索引被创建,我们可以利用该索引搜索任何子文档字段组成,如下:
>db.users.find({"address.city":"Los Angeles"})
请记住,查询表达式必须遵循指定索引的顺序。 所以上面创建的索引将支持以下查询:
>db.users.find({"address.city":"Los Angeles","address.state":"California"})
它还支持以下查询:
>db.users.find({"address.city":"LosAngeles","address.state":"California","address.pincode":"123"})