人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

MongoDB索引類型匯總分享

發(fā)布日期:2022-07-15 19:52 | 文章來源:gibhub

MongoDB 4.2官方支持索引類型如下:

  • 單字段索引
  • 復合索引
  • 多鍵索引
  • 文本索引
  • 2dsphere索引
  • 2d索引
  • geoHaystack索引
  • 哈希索引

單字段索引

在單個字段上創(chuàng)建升序索引

handong1:PRIMARY> db.test.getIndexes()
[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_",
		"ns" : "db6.test"
	}
]

在字段id上添加升序索引

handong1:PRIMARY> db.test.createIndex({"id":1})
{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1621322378, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1621322378, 1)
}
handong1:PRIMARY> db.test.getIndexes()
[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_",
		"ns" : "db6.test"
	},
	{
		"v" : 2,
		"key" : {
			"id" : 1
		},
		"name" : "id_1",
		"ns" : "db6.test"
	}
]
handong1:PRIMARY> db.test.find({"id":100})
{ "_id" : ObjectId("60a35d061f183b1d8f092114"), "id" : 100, "name" : "handong", "ziliao" : { "name" : "handong", "age" : 25, "hobby" : "mongodb" } }

上述查詢可以使用新建的單字段索引。

在嵌入式字段上創(chuàng)建索引

handong1:PRIMARY> db.test.createIndex({"ziliao.name":1})
{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 2,
	"numIndexesAfter" : 3,
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1621323677, 2),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1621323677, 2)
}

以下查詢可以用的新建的索引。

db.test.find({"ziliao.name":"handong"})

在內(nèi)嵌文檔上創(chuàng)建索引

handong1:PRIMARY> db.test.createIndex({ziliao:1})
{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 3,
	"numIndexesAfter" : 4,
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1621324059, 2),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1621324059, 2)
}

以下查詢可以使用新建的索引。

db.test.find({ziliao:{ "name" : "handong", "age" : 25, "hobby" : "mongodb" }})

復合索引

創(chuàng)建復合索引

db.user.createIndex({"product_id":1,"type":-1})

以下查詢可以用到新建的復合索引

db.user.find({"product_id":"e5a35cfc70364d2092b8f5d14b1a3217","type":0})

多鍵索引

基于一個數(shù)組創(chuàng)建索引,MongoDB會自動創(chuàng)建為多鍵索引,無需刻意指定。
多鍵索引也可以基于內(nèi)嵌文檔來創(chuàng)建。
多鍵索引的邊界值的計算依賴于特定的規(guī)則。
查看文檔:

handong1:PRIMARY> db.score.find()
{ "_id" : ObjectId("60a32d7f1f183b1d8f0920ad"), "name" : "dandan", "age" : 30, "score" : [ { "english" : 90, "math" : 99, "physics" : 88 } ], "is_del" : false }
{ "_id" : ObjectId("60a32d8b1f183b1d8f0920ae"), "name" : "dandan", "age" : 30, "score" : [ 99, 98, 97, 96 ], "is_del" : false }
{ "_id" : ObjectId("60a32d9a1f183b1d8f0920af"), "name" : "dandan", "age" : 30, "score" : [ 100, 100, 100, 100 ], "is_del" : false }
{ "_id" : ObjectId("60a32e8c1f183b1d8f0920b0"), "name" : "dandan", "age" : 30, "score" : [ { "english" : 70, "math" : 99, "physics" : 88 } ], "is_del" : false }
{ "_id" : ObjectId("60a37b141f183b1d8f0aa751"), "name" : "dandan", "age" : 30, "score" : [ 96, 95 ] }
{ "_id" : ObjectId("60a37b1d1f183b1d8f0aa752"), "name" : "dandan", "age" : 30, "score" : [ 96, 95, 94 ] }
{ "_id" : ObjectId("60a37b221f183b1d8f0aa753"), "name" : "dandan", "age" : 30, "score" : [ 96, 95, 94, 93 ] }

創(chuàng)建score字段多鍵索引:

db.score.createIndex("score":1)
handong1:PRIMARY> db.score.find({"score":[ 96, 95 ]})
{ "_id" : ObjectId("60a37b141f183b1d8f0aa751"), "name" : "dandan", "age" : 30, "score" : [ 96, 95 ] }

查看執(zhí)行計劃:

handong1:PRIMARY> db.score.find({"score":[ 96, 95 ]}).explain()
{
	"queryPlanner" : {
		"plannerVersion" : 1,
		"namespace" : "db6.score",
		"indexFilterSet" : false,
		"parsedQuery" : {
			"score" : {
				"$eq" : [
					96,
					95
				]
			}
		},
		"queryHash" : "8D76FC59",
		"planCacheKey" : "E2B03CA1",
		"winningPlan" : {
			"stage" : "FETCH",
			"filter" : {
				"score" : {
					"$eq" : [
						96,
						95
					]
				}
			},
			"inputStage" : {
				"stage" : "IXSCAN",
				"keyPattern" : {
					"score" : 1
				},
				"indexName" : "score_1",
				"isMultiKey" : true,
				"multiKeyPaths" : {
					"score" : [
						"score"
					]
				},
				"isUnique" : false,
				"isSparse" : false,
				"isPartial" : false,
				"indexVersion" : 2,
				"direction" : "forward",
				"indexBounds" : {
					"score" : [
						"[96.0, 96.0]",
						"[[ 96.0, 95.0 ], [ 96.0, 95.0 ]]"
					]
				}
			}
		},
		"rejectedPlans" : [ ]
	},
	"serverInfo" : {
		"host" : "mongo3",
		"port" : 27017,
		"version" : "4.2.12",
		"gitVersion" : "5593fd8e33b60c75802edab304e23998fa0ce8a5"
	},
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1621326912, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1621326912, 1)
}

可以看到已經(jīng)使用了新建的多鍵索引。

文本索引

    為了支持對字符串內(nèi)容的文本搜索查詢,MongoDB提供了文本索引。文本(text )索引可以包含任何值為字符串或字符串元素數(shù)組的字段

db.user.createIndex({"sku_attributes":"text"})
db.user.find({$text:{$search:"測試"}})

查看執(zhí)行計劃:

handong1:PRIMARY> db.user.find({$text:{$search:"測試"}}).explain()
{
	"queryPlanner" : {
		"plannerVersion" : 1,
		"namespace" : "db6.user",
		"indexFilterSet" : false,
		"parsedQuery" : {
			"$text" : {
				"$search" : "測試",
				"$language" : "english",
				"$caseSensitive" : false,
				"$diacriticSensitive" : false
			}
		},
		"queryHash" : "83098EE1",
		"planCacheKey" : "7E2D582B",
		"winningPlan" : {
			"stage" : "TEXT",
			"indexPrefix" : {
				
			},
			"indexName" : "sku_attributes_text",
			"parsedTextQuery" : {
				"terms" : [
					"測試"
				],
				"negatedTerms" : [ ],
				"phrases" : [ ],
				"negatedPhrases" : [ ]
			},
			"textIndexVersion" : 3,
			"inputStage" : {
				"stage" : "TEXT_MATCH",
				"inputStage" : {
					"stage" : "FETCH",
					"inputStage" : {
						"stage" : "OR",
						"inputStage" : {
							"stage" : "IXSCAN",
							"keyPattern" : {
								"_fts" : "text",
								"_ftsx" : 1
							},
							"indexName" : "sku_attributes_text",
							"isMultiKey" : true,
							"isUnique" : false,
							"isSparse" : false,
							"isPartial" : false,
							"indexVersion" : 2,
							"direction" : "backward",
							"indexBounds" : {
								
							}
						}
					}
				}
			}
		},
		"rejectedPlans" : [ ]
	},
	"serverInfo" : {
		"host" : "mongo3",
		"port" : 27017,
		"version" : "4.2.12",
		"gitVersion" : "5593fd8e33b60c75802edab304e23998fa0ce8a5"
	},
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1621328543, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1621328543, 1)
}

可以看到通過文本索引可以查到包含測試關鍵字的數(shù)據(jù)。
**注意:**可以根據(jù)自己需要創(chuàng)建復合文本索引。

2dsphere索引

創(chuàng)建測試數(shù)據(jù)

db.places.insert(
   {
      loc : { type: "Poi

添加2dsphere索引

db.places.createIndex( { loc : "2dsphere" } )
db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )

利用2dsphere索引查詢多邊形里的點

鳳凰嶺
[116.098234,40.110569]
天安門
[116.405239,39.913839]
四惠橋
[116.494351,39.912068]
望京
[116.494494,40.004594]

handong1:PRIMARY> db.places.find( { loc :
...                   { $geoWithin :
...                     { $geometry :
...                       { type : "Polygon" ,
...                         coordinates : [ [
...               [116.098234,40.110569] ,
...               [116.405239,39.913839] ,
...               [116.494351,39.912068] ,
...               [116.494494,40.004594] ,
...               [116.098234,40.110569]
...             ] ]
...                 } } } } )
{ "_id" : ObjectId("60a4c950d4211a77d22bf7f8"), "loc" : { "type" : "Poi

可以看到把集合中包含在指定四邊形里的點,全部列了出來。

利用2dsphere索引查詢球體上定義的圓內(nèi)的點

handong1:PRIMARY> db.places.find( { loc :
...                   { $geoWithin :
...                     { $centerSphere :
...                        [ [ 116.439518, 39.954751 ] , 2/3963.2 ]
...                 } } } )
{ "_id" : ObjectId("60a4c94fd4211a77d22bf7f7"), "loc" : { "type" : "Poi

返回所有半徑為經(jīng)度 116.439518 E 和緯度 39.954751 N 的2英里內(nèi)坐標。示例將2英里的距離轉(zhuǎn)換為弧度,通過除以地球近似的赤道半徑3963.2英里。

2d索引

在以下情況下使用2d索引:

  • 您的數(shù)據(jù)庫具有來自MongoDB 2.2或更早版本的舊版舊版坐標對。
  • 您不打算將任何位置數(shù)據(jù)存儲為GeoJSON對象。

哈希索引

要創(chuàng)建hashed索引,請指定 hashed 作為索引鍵的值,如下例所示:

handong1:PRIMARY> db.test.createIndex({"_id":"hashed"})
{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 4,
	"numIndexesAfter" : 5,
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1621419338, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1621419338, 1)
}

注意事項

  • MongoDB支持任何單個字段的 hashed 索引。hashing函數(shù)折疊嵌入的文檔并計算整個值的hash值,但不支持多鍵(即.數(shù)組)索引。
  • 您不能創(chuàng)建具有hashed索引字段的復合索引,也不能在索引上指定唯一約束hashed;但是,您可以hashed在同一字段上創(chuàng)建索引和升序/降序(即非哈希)索引:MongoDB將對范圍查詢使用標量索引。

到此這篇關于MongoDB索引類型匯總分享的文章就介紹到這了,更多相關MongoDB索引內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持本站!

美國服務器租用

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務

7x24全年不間斷在線

專屬顧問服務

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務熱線

關注
微信

關注官方微信
頂部