实验一MongoDB基本操作

  1. 安装Windows版MongoDB
  2. 使用MongoDB对数据进行增删改查操作
  3. 比较有无索引时的查询性能

在这里插入图片描述

创建一个数据库

使用use命令创建或切换数据库

use <数据库名>

use mytest          //创建名为myteset的数据库

查看数据库

若自定义数据库没有插入记录,则用户在查看数据库时不会显示出来,只有插入数据的数据库才会显示相应信息。

show dbs

创建一个集合

db.createCollection(<集合名>, options)

  • capped 若为true,则启用封闭的集合。
    //达到其最大时自动覆盖最旧的
  • size 指定上限集合的最大大小
  • max 指定上限集合中允许的最大文档数

capped若指定true,则还需指定size参数

db.createCollection("mycollection")

插入多条文档记录到集合中

若指定文档的_id字段,值_id必须在集合中唯一。
若存在某条待插入文档和集合的某文档_id相同的情况,_id相同的文档与后续文档都将不再插入。

db.mycollection.insert(
{_id:1,name:"red",age:20}
)

insertOne()插入一条文档

db.mycollection.insertOne(       
{name:"red",age:22,status:"A",}
);

insertMany()插入多条文档——无需具有相同字段

db.mycollection.insertMany(
[
{name:"red",age:18,grade:98,},
{name:"green",age:22,grade:90,}
{name:"blue",age:18,grade:95,},
{name:"black",age:18,grade:94,},
{name:"white",age:18,grade:76,}
]
)

writeConcern: 表示自定义写出错的级别,出错捕捉机制
ordered:指定是否有序写入,默认 true,有序插入

db.mycollection.insertMany(
[
{name:"black",age:18,grade:94,},
{name:"white",age:18,grade:76,}
],
{
//writeConcern: <document>,
ordered: true
}
)

修改一个文档的全部内容

db.mycollection.save(
{
"_id":ObjectId("5f996f7ee0474b49519cecfb"),
"name":"haha",
"age":32,
"grade":35
}
)

对多个文档统一字段内容进行修改

db.collection.update(

<query>,             //参数设置查询条件
<update>,            //更新操作符

Upsert,              //若不存在update记录,是否插入。true插入,默认false不插入
multi,               //默认false,更新找到的第一条。true把按条件查询出来的记录全部更新
writeConcern,        //出错级别
collation            //指定语言

)
> db.mycollection.update(
... {item:"book"},
... {$set:{"name":"xiao"}},
... {upsert:true}
... )

db.mycollection.update(
{age:18},
{$set:{grade:100}},
false,
true  // 全部修改
)  

查询数据库中满足指定条件的文档

 db.mycollection.find(
{
grade:33
}
)

在集合中插入1000个文档,执行find.explain()命令,记录分析结果

for(var i=1;i<=2000;i++){
db.second.insert({"id":i+1,"name":"gbh"+i,age:21})
}

输出:WriteResult({ “nInserted” : 1 })

对文档中的一个字段创建索引,对该字段进行find.explain()命令,记录分析结果;

> db.first.createIndex({age:18})
{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
}
> db.first.find({age:33}).explain()
{
        "queryPlanner" : {
                "plannerVersion" : 1,
                "namespace" : "gbh2.first",
                "indexFilterSet" : false,
                "parsedQuery" : {
                        "age" : {
                                "$eq" : 33
                        }
                },
                "queryHash" : "3838C5F3",
                "planCacheKey" : "041C5DE3",
                "winningPlan" : {
                        "stage" : "FETCH",
                        "inputStage" : {
                                "stage" : "IXSCAN",
                                "keyPattern" : {
                                        "age" : 18
                                },
                                "indexName" : "age_18",
                                "isMultiKey" : false,
                                "multiKeyPaths" : {
                                        "age" : [ ]
                                },
                                "isUnique" : false,
                                "isSparse" : false,
                                "isPartial" : false,
                                "indexVersion" : 2,
                                "direction" : "forward",
                                "indexBounds" : {
                                        "age" : [
                                                "[33.0, 33.0]"
                                        ]
                                }
                        }
                },
                "rejectedPlans" : [ ]
        },
        "serverInfo" : {
                "host" : "DESKTOP-RNU15KQ",
                "port" : 27017,
                "version" : "4.4.1",
                "gitVersion" : "ad91a93a5a31e175f5cbf8c69561e788bbc55ce1"
        },
        "ok" : 1
}

> db.first.find({age:18}).explain()
{
        "queryPlanner" : {
                "plannerVersion" : 1,
                "namespace" : "gbh2.first",
                "indexFilterSet" : false,
                "parsedQuery" : {
                        "age" : {
                                "$eq" : 18
                        }
                },
                "queryHash" : "3838C5F3",
                "planCacheKey" : "041C5DE3",
                "winningPlan" : {
                        "stage" : "FETCH",
                        "inputStage" : {
                                "stage" : "IXSCAN",
                                "keyPattern" : {
                                        "age" : 18
                                },
                                "indexName" : "age_18",
                                "isMultiKey" : false,
                                "multiKeyPaths" : {
                                        "age" : [ ]
                                },
                                "isUnique" : false,
                                "isSparse" : false,
                                "isPartial" : false,
                                "indexVersion" : 2,
                                "direction" : "forward",
                                "indexBounds" : {
                                        "age" : [
                                                "[18.0, 18.0]"
                                        ]
                                }
                        }
                },
                "rejectedPlans" : [ ]
        },
        "serverInfo" : {
                "host" : "DESKTOP-RNU15KQ",
                "port" : 27017,
                "version" : "4.4.1",
                "gitVersion" : "ad91a93a5a31e175f5cbf8c69561e788bbc55ce1"
        },
        "ok" : 1
}

删除多余文档,保留200个文档,对创建索引字段执行find.explain()命 令,记录分析结果

在此基础上删除建立的索引,执行find.explain()命令,记录分析结果

对以上执行结果惊醒统计,制出统计分析比较表,说明比较结论

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值