MongoDB笔记 索引(详细)
Posted Aurora1217
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB笔记 索引(详细)相关的知识,希望对你有一定的参考价值。
目录
1.单一字段索引
命令:
db.collection_name.createIndex(<key>:<n>)
key:键名
n=1:表示升序
n=-1:表示降序
实例:
> db.books.insertMany(
... [
... name:"<a cat story>",price:20,color:"red",
... name:"<crying birds story>",price:20,color:"green",
... name:"<big dogs story>",price:25,color:"blue"
... ]
... )
"acknowledged" : true,
"insertedIds" : [
ObjectId("608bc108f85311b76bd55902"),
ObjectId("608bc108f85311b76bd55903"),
ObjectId("608bc108f85311b76bd55904")
]
> db.books.createIndex(name:1)
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
> db.books.find(name:$regex:/story>$/).pretty()
"_id" : ObjectId("608bc108f85311b76bd55902"),
"name" : "<a cat story>",
"price" : 20,
"color" : "red"
"_id" : ObjectId("608bc108f85311b76bd55904"),
"name" : "<big dogs story>",
"price" : 25,
"color" : "blue"
"_id" : ObjectId("608bc108f85311b76bd55903"),
"name" : "<crying birds story>",
"price" : 20,
"color" : "green"
2.字段值唯一
命令:
db.collection_name.createIndex(<key>:<n>,unique:true)
实例:
> db.books.createIndex(name:1,unique:true)
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
> db.books.insert(name:"<a cat story>",price:10,color:"pink")
WriteResult(
"nInserted" : 0,
"writeError" :
"code" : 11000,
"errmsg" : "E11000 duplicate key error collection: goodsdb.books index: name_1 dup key: : \\"<a cat story>\\" "
)
原来有一个name为<a cat story>的文档
索引字段唯一之后,再插入一个name为<a cat story>将报错
> db.books.createIndex(price:1,unique:true)
"ok" : 0,
"errmsg" : "E11000 duplicate key error collection: goodsdb.books index: price_1 dup key: : 20.0 ",
"code" : 11000,
"codeName" : "DuplicateKey"
当price键对应的值不唯一(有两个price键对应的值都是20)时,设置唯一索引不成功
3.多字段索引
命令:
db.collection_name.createIndex(<key>:<n>,<key>:<n>,…)
实例:
> db.books.createIndex(price:1,color:-1)
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 2,
"numIndexesAfter" : 3,
"ok" : 1
> db.books.find().sort(price:-1,color:1).pretty()
"_id" : ObjectId("608bc487f85311b76bd5590d"),
"name" : "<big dogs story>",
"price" : 25,
"color" : "blue"
"_id" : ObjectId("608bc487f85311b76bd5590c"),
"name" : "<crying birds story>",
"price" : 20,
"color" : "green"
"_id" : ObjectId("608bc487f85311b76bd5590b"),
"name" : "<a cat story>",
"price" : 20,
"color" : "red"
4.其他索引方法
(1)返回所有索引
命令:
db.collection.getIndexes()
(2)移除集合制定索引
命令:
db.collection.dropIndex(name:1)
(3)移除全部索引
命令:
db.collection.dropIndex()
实例:
> db.books.getIndexes()
[
"v" : 2,
"key" :
"_id" : 1
,
"name" : "_id_",
"ns" : "goodsdb.books"
,
"v" : 2,
"key" :
"name" : 1
,
"name" : "name_1",
"ns" : "goodsdb.books"
,
"v" : 2,
"key" :
"price" : 1,
"color" : -1
,
"name" : "price_1_color_-1",
"ns" : "goodsdb.books"
]
> db.books.dropIndex(name:1)
"nIndexesWas" : 3, "ok" : 1
> db.books.getIndexes()
[
"v" : 2,
"key" :
"_id" : 1
,
"name" : "_id_",
"ns" : "goodsdb.books"
,
"v" : 2,
"key" :
"price" : 1,
"color" : -1
,
"name" : "price_1_color_-1",
"ns" : "goodsdb.books"
]
以上是关于MongoDB笔记 索引(详细)的主要内容,如果未能解决你的问题,请参考以下文章