一、索引操作
说明,下面的内容举例时,以"dailyTrip"collection为例。 字段内容如下:
{
"_id" : ObjectId("63ec5a971ddbe429cbeeffe3"), // object id
"car_type" : "Gett", // string
"date" : ISODate("2016-04-01T00:00:00.000+0000"), //ISODate
"trips" : 0.0, // number
"monthly" : "NA", // string
"parent_type" : "Ride-hailing apps", // string
"monthly_is_estimated" : true, // boolean
"geo" : {
// object
"$concat" : [ // array
"$parent_type",
"$grouping"
]
}
}
执行看看有5.17万条数据
1. 索引类型
- 单列索引: 在一个字段上创建的索引。
- 复合索引:由多个字段组合一起创建的索引。使用的时候要注意最左前缀原则,避免索引无法命中(失效)。
- 文本索引(全文索引)和空间索引(GEO索引),不常用,这里不讲,具体自行网上查询。
2. 查看
语法:
db.Collection.getIndexs();
返回内容说明:
[ // 返回一个数组,内容是所有索引
{
"v" : 2.0, // 索引版本,可忽略
"key" : {
// 索引加在哪个字段,以及排序
"_id" : 1.0 // _id 是字段, 1.0是正序(升序), -1.0是倒序(倒序)
},
"name" : "_id_" // 索引名,如果添加的时候没有指定,Mongo会自动生成。
}
]
举例:
可以看到返回一个name为 id的索引。 作用于 _id上, 升序排列。
3. 创建
语法:
db.collection.createIndex(keys, options)
// 组合索引
db.collection.createIndex( {
<field1>: <type>, <field2>: <type2>, ... } ) // 其中 <fieldN>是字段名 <typeN>是排序
注意:3.0.0 版本之前创建索引方法为 db.collection.ensureIndex()。 5.0之后ensureIndex() 已被移除。
举例:
// 创建单字段索引
db.dailyTrip.createIndex({"car_type":1});
// 返回结果
{
"numIndexesBefore" : 1.0, // 新建索引前的索引数
"numIndexesAfter" : 2.0, // 新建索引后的索引数
"createdCollectionAutomatically" : false, // 一般情况下,如果该集合存在,这里就是返回false。如果指定的集合不存在,MongoDB 默认情况下会自动创建该集合,并在该集合上创建索引,此时返回true。
"ok" : 1.0 // 创建结果 1.0则是成功。返回0则说明报错了。
}
// 如果创建的字段的索引已经存在,则返回如下
{
"numIndexesBefore" : 2.0,
"numIndexesAfter" : 2.0,
"note" : "all indexes already exist", // 提示已经存在
"ok" : 1.0
}
// 创建复合索引
db.dailyTrip.createIndex({"parent_type":1, "car_type":1})
// 也可以指定自定义索引名
db.dailyTrip.createIndex({"parent_type":1, "car_type":1}, { name: "inx_parantType_carType" }) // 这里自己试验
// 来自官方文档 https://www.mongodb.com/docs/manual/reference/command/createIndexes/
创建完毕后,再次查看当前索引情况
4. 删除
语法:
删除指定集合中所有索引: