实验目的:
安装Windows版MongoDB
使用MongoDB对数据进行增删改查操作
比较有无索引时的查询性能
实验内容:
题目1:安装Windows版MongoDB
1.安装MongoDB 4.4 社区版
2.在环境变量中添加MongoDB安装路径
3.创建MongoDB的Windows服务,服务名为MongoDB
4.设置Windows服务为【自动】启动
5.使用mongod命令启动服务
6.使用mongo命令启动shell窗口
最详细的Windows平台安装MongoDB教程
https://www.cnblogs.com/TM0831/p/10606624.html
题目2:对数据进行增删改查操作
1.创建一个数据库
2.创建一个集合
3.插入多条文档记录到集合中
4.修改一个文档的全部内容
5.对多个文档同一字段内容进行修改
6.查询数据库中满足指定条件的文档
题目3:比较有无索引时查询性能
在集合中插入1000个文档,执行find.explain()命令,记录分析结果
对文档中的一个字段创建索引,对该字段进行find.explain()命令,记录分析结果;
删除多余文档,保留200个文档,对创建索引字段执行find.explain()命令,记录分析结果
在此基础上删除建立的索引,执行find.explain()命令,记录分析结果
对以上执行结果惊醒统计,制出统计分析比较表,说明比较结论
5.使用mongod命令启动服务
6.使用mongo命令启动shell窗口
1.创建一个数据库
use cww 结果: switched to db cww
2.创建一个集合
db.createCollection("wds") 结果: { "ok" : 1 }
3.插入多条文档记录到集合中
db.wds.insert( [ { item: "小学生教材",name:"《小学一年级语文(上册)》",price:12}, { item: "初中生教材",name:"《初中一年级语文(上册)》",price:15}, { item: "高中生教材",name:"《高中一年级语文(上册)》",price:20}, { item: "外语教材",name:"《英语全解\nABC(五年级上)》",price:30} ]) 结果: BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 4, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] })
4.修改一个文档的全部内容
db.wds.update({"item":"小学生教材"},{$set:{"name":"wds"}}) 结果: db.wds.find() { "_id" : ObjectId("6170dd4d3e5499c12846577c"), "item" : "小学生教材", "name" : "wds", "price" : 12 } { "_id" : ObjectId("6170dd4d3e5499c12846577d"), "item" : "初中生教材", "name" : "《初中一年级语文(上册)》", "price" : 15 } { "_id" : ObjectId("6170dd4d3e5499c12846577e"), "item" : "高中生教材", "name" : "《高中一年级语文(上册)》", "price" : 20 } { "_id" : ObjectId("6170dd4d3e5499c12846577f"), "item" : "外语教材", "name" : "《英语全解\nABC(五年级上)》", "price" : 30 } { "_id" : ObjectId("6170df5d313c45471807211c"), "item" : "小学生教材" }
5.对多个文档同一字段内容进行修改
db.wds.update({"item":"小学生教材"},{$set:{"name":"wds"}},{multi:true} ) 结果: db.wds.find() { "_id" : ObjectId("6170dd4d3e5499c12846577c"), "item" : "小学生教材", "name" : "wds", "price" : 12 } { "_id" : ObjectId("6170dd4d3e5499c12846577d"), "item" : "初中生教材", "name" : "《初中一年级语文(上册)》", "price" : 15 } { "_id" : ObjectId("6170dd4d3e5499c12846577e"), "item" : "高中生教材", "name" : "《高中一年级语文(上册)》", "price" : 20 } { "_id" : ObjectId("6170dd4d3e5499c12846577f"), "item" : "外语教材", "name" : "《英语全解\nABC(五年级上)》", "price" : 30 } { "_id" : ObjectId("6170df5d313c45471807211c"), "item" : "小学生教材", "name" : "wds" }
6.查询数据库中满足指定条件的文档
db.wds.find({"item":"小学生教材"}) 结果: { "_id" : ObjectId("6170dd4d3e5499c12846577c"), "item" : "小学生教材", "name" : "wds", "price" : 12 } { "_id" : ObjectId("6170df5d313c45471807211c"), "item" : "小学生教材", "name" : "wds" }
- 在集合中插入1000个文档,执行find.explain()命令,记录分析结果
for(var i =0;i<=1000;i++){db.wds.insert({"id":i+1,"name":"wds"+i,"age":21})} 结果: db.wds.find() { "_id" : ObjectId("6170dd4d3e5499c12846577c"), "item" : "小学生教材", "name" : "wds", "price" : 12 } { "_id" : ObjectId("6170dd4d3e5499c12846577d"), "item" : "初中生教材", "name" : "《初中一年级语文(上册)》", "price" : 15 } { "_id" : ObjectId("6170dd4d3e5499c12846577e"), "item" : "高中生教材", "name" : "《高中一年级语文(上册)》", "price" : 20 } { "_id" : ObjectId("6170dd4d3e5499c12846577f"), "item" : "外语教材", "name" : "《英语全解\nABC(五年级上)》", "price" : 30 } { "_id" : ObjectId("6170df5d313c45471807211c"), "item" : "小学生教材", "name" : "wds" } { "_id" : ObjectId("6170ea883234079ed825be3e"), "id" : 1, "name" : "wds0", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825be3f"), "id" : 2, "name" : "wds1", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825be40"), "id" : 3, "name" : "wds2", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825be41"), "id" : 4, "name" : "wds3", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825be42"), "id" : 5, "name" : "wds4", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825be43"), "id" : 6, "name" : "wds5", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825be44"), "id" : 7, "name" : "wds6", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825be45"), "id" : 8, "name" : "wds7", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825be46"), "id" : 9, "name" : "wds8", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825be47"), "id" : 10, "name" : "wds9", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825be48"), "id" : 11, "name" : "wds10", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825be49"), "id" : 12, "name" : "wds11", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825be4a"), "id" : 13, "name" : "wds12", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825be4b"), "id" : 14, "name" : "wds13", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825be4c"), "id" : 15, "name" : "wds14", "age" : 21 } Type "it" for more 第二句: db.wds.find({"id":801}).explain("executionStats") 结果: { "queryPlanner" : { "plannerVersion" : 1, "namespace" : "cww.wds", "indexFilterSet" : false, "parsedQuery" : { "id" : { "$eq" : 801 } }, "winningPlan" : { "stage" : "COLLSCAN", "filter" : { "id" : { "$eq" : 801 } }, "direction" : "forward" }, "rejectedPlans" : [ ] }, "executionStats" : { "executionSuccess" : true, "nReturned" : 1, "executionTimeMillis" : 0, "totalKeysExamined" : 0, "totalDocsExamined" : 1006, "executionStages" : { "stage" : "COLLSCAN", "filter" : { "id" : { "$eq" : 801 } }, "nReturned" : 1, "executionTimeMillisEstimate" : 0, "works" : 1008, "advanced" : 1, "needTime" : 1006, "needYield" : 0, "saveState" : 1, "restoreState" : 1, "isEOF" : 1, "direction" : "forward", "docsExamined" : 1006 } },
- 对文档中的一个字段创建索引,对该字段进行find.explain()命令,记录分析结果;
db.wds.ensureIndex({"id":801}) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } db.wds.find({"id":801}).explain("executionStats") 结果: { "queryPlanner" : { "plannerVersion" : 1, "namespace" : "cww.wds", "indexFilterSet" : false, "parsedQuery" : { "id" : { "$eq" : 801 } }, "winningPlan" : { "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "id" : 801 }, "indexName" : "id_801", "isMultiKey" : false, "multiKeyPaths" : { "id" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "id" : [ "[801.0, 801.0]" ] } } }, "rejectedPlans" : [ ] }, "executionStats" : { "executionSuccess" : true, "nReturned" : 1, "executionTimeMillis" : 1, "totalKeysExamined" : 1, "totalDocsExamined" : 1, "executionStages" : { "stage" : "FETCH", "nReturned" : 1, "executionTimeMillisEstimate" : 0, "works" : 2, "advanced" : 1, "needTime" : 0, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "docsExamined" : 1, "alreadyHasObj" : 0, "inputStage" : { "stage" : "IXSCAN", "nReturned" : 1, "executionTimeMillisEstimate" : 0, "works" : 2, "advanced" : 1, "needTime" : 0, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "keyPattern" : { "id" : 801 }, "indexName" : "id_801", "isMultiKey" : false, "multiKeyPaths" : { "id" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "id" : [ "[801.0, 801.0]" ] }, "keysExamined" : 1, "seeks" : 1, "dupsTested" : 0, "dupsDropped" : 0 } } }, "serverInfo" : { "host" : "DESKTOP-FP9BBM9", "port" : 27017, "version" : "4.4.0", "gitVersion" : "563487e100c4215e2dce98d0af2a6a5a2d67c5cf" }, "ok" : 1 }
- 删除多余文档,保留200个文档,对创建索引字段执行find.explain()命令,记录分析结果
for(var i=0;i<=800;i++){ db.wds.remove({"id":i})} WriteResult({ "nRemoved" : 1 }) db.wds.find() 结果: { "_id" : ObjectId("6170dd4d3e5499c12846577c"), "item" : "小学生教材", "name" : "wds", "price" : 12 } { "_id" : ObjectId("6170dd4d3e5499c12846577d"), "item" : "初中生教材", "name" : "《初中一年级语文(上册)》", "price" : 15 } { "_id" : ObjectId("6170dd4d3e5499c12846577e"), "item" : "高中生教材", "name" : "《高中一年级语文(上册)》", "price" : 20 } { "_id" : ObjectId("6170dd4d3e5499c12846577f"), "item" : "外语教材", "name" : "《英语全解\nABC(五年级上)》", "price" : 30 } { "_id" : ObjectId("6170df5d313c45471807211c"), "item" : "小学生教材", "name" : "wds" } { "_id" : ObjectId("6170ea883234079ed825c15e"), "id" : 801, "name" : "wds800", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825c15f"), "id" : 802, "name" : "wds801", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825c160"), "id" : 803, "name" : "wds802", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825c161"), "id" : 804, "name" : "wds803", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825c162"), "id" : 805, "name" : "wds804", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825c163"), "id" : 806, "name" : "wds805", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825c164"), "id" : 807, "name" : "wds806", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825c165"), "id" : 808, "name" : "wds807", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825c166"), "id" : 809, "name" : "wds808", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825c167"), "id" : 810, "name" : "wds809", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825c168"), "id" : 811, "name" : "wds810", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825c169"), "id" : 812, "name" : "wds811", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825c16a"), "id" : 813, "name" : "wds812", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825c16b"), "id" : 814, "name" : "wds813", "age" : 21 } { "_id" : ObjectId("6170ea883234079ed825c16c"), "id" : 815, "name" : "wds814", "age" : 21 } Type "it" for more db.wds.find({"id":801}).explain("executionStats") 结果: { "queryPlanner" : { "plannerVersion" : 1, "namespace" : "cww.wds", "indexFilterSet" : false, "parsedQuery" : { "id" : { "$eq" : 801 } }, "winningPlan" : { "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "id" : 801 }, "indexName" : "id_801", "isMultiKey" : false, "multiKeyPaths" : { "id" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "id" : [ "[801.0, 801.0]" ] } } }, "rejectedPlans" : [ ] }, "executionStats" : { "executionSuccess" : true, "nReturned" : 1, "executionTimeMillis" : 0, "totalKeysExamined" : 1, "totalDocsExamined" : 1, "executionStages" : { "stage" : "FETCH", "nReturned" : 1, "executionTimeMillisEstimate" : 0, "works" : 2, "advanced" : 1, "needTime" : 0, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "docsExamined" : 1, "alreadyHasObj" : 0, "inputStage" : { "stage" : "IXSCAN", "nReturned" : 1, "executionTimeMillisEstimate" : 0, "works" : 2, "advanced" : 1, "needTime" : 0, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "keyPattern" : { "id" : 801 }, "indexName" : "id_801", "isMultiKey" : false, "multiKeyPaths" : { "id" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "id" : [ "[801.0, 801.0]" ] }, "keysExamined" : 1, "seeks" : 1, "dupsTested" : 0, "dupsDropped" : 0 } } }, "serverInfo" : { "host" : "DESKTOP-FP9BBM9", "port" : 27017, "version" : "4.4.0", "gitVersion" : "563487e100c4215e2dce98d0af2a6a5a2d67c5cf" }, "ok" : 1 }
- 在此基础上删除建立的索引,执行find.explain()命令,记录分析结果
db.wds.dropIndex({"id":801}) { "nIndexesWas" : 2, "ok" : 1 } 结果: > db.wds.find({"id":801}).explain("executionStats") { "queryPlanner" : { "plannerVersion" : 1, "namespace" : "cww.wds", "indexFilterSet" : false, "parsedQuery" : { "id" : { "$eq" : 801 } }, "winningPlan" : { "stage" : "COLLSCAN", "filter" : { "id" : { "$eq" : 801 } }, "direction" : "forward" }, "rejectedPlans" : [ ] }, "executionStats" : { "executionSuccess" : true, "nReturned" : 1, "executionTimeMillis" : 0, "totalKeysExamined" : 0, "totalDocsExamined" : 206, "executionStages" : { "stage" : "COLLSCAN", "filter" : { "id" : { "$eq" : 801 } }, "nReturned" : 1, "executionTimeMillisEstimate" : 0, "works" : 208, "advanced" : 1, "needTime" : 206, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "direction" : "forward", "docsExamined" : 206 } }, "serverInfo" : { "host" : "DESKTOP-FP9BBM9", "port" : 27017, "version" : "4.4.0", "gitVersion" : "563487e100c4215e2dce98d0af2a6a5a2d67c5cf" }, "ok" : 1 }
- 对以上执行结果惊醒统计,制出统计分析比较表,说明比较结论
type | needtime |
---|---|
1006个数,未定索引 | 1006 |
1006个数,定索引{“id”:801} | 0 |
206个数,定索引 | 0 |
206个数,未定索引 | 206 |