MongoDB

安装MongoDB

  • 安装windos 版本
  • ​ mongodb-win32-x86_64-2008plus-ssl-4.0.10-signed
  • ​ 百度云盘 链接:https://pan.baidu.com/s/1zoRzUMym6qV7rw0HNVn4lg
    ​ 提取码:bj9s
  • 配置环境变量
  • ​ E:\Program Files\MongoDB\Server\4.0\bin
  • 启动服务器时
    mongod --dbpath 数据库路径 --port 端口号

基本概念

1.数据库(database)

  • ​ 数据库的服务器 -用来保存数据 mongod 用来启动服务器 4.0版本以上 自动启动
  • ​ 数据库的客户端 -用来操作服务器 对数据进行增删改查的操作 mongo 用来启动客户端

2.集合(collection)

3.文档(document)

  • ​ 在MongoDB中,数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合或数据库不 存在会自动创建数据库和集合。

基本指令

  • show dbs show database -显示当前的所有数据库

  • use 数据库名 -进入到指定的数据库中

  • show collections -显示数据库中所有的集合

  • db -db表示的是当前所在的数据库

  • 数据库的CRUD操作

新增文档

1
2
3
4
5
//向数据库中插入一个文档
//向集合中插入一个文档 db.<collection>.insert(doc) 会创建一个id 时间戳+机器码 ObjectId() 下划线 _id 可以自己定义
//向test数据库中,stus集合中插入一个新的学生对象
db.<collection>.insertOne() -插入一个文档对象
db.<collection>.insertMany() -插入多个文档对象 []
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#回报:	包含以下内容的文件:
#一个acknowledged布尔值,设置为true操作是否以写关注运行或false是否禁用了写关注
#一个insertedIds数组,包含_id每个成功插入的文档的值
try {
db.products.insertMany( [
{ item: "card", qty: 15 },
{ item: "envelope", qty: 20 },
{ item: "stamps" , qty: 30 }
] );
} catch (e) {
print (e);
}

{
"acknowledged" : true,
"insertedIds" : [
ObjectId("562a94d381cb9f1cd6eb0e1a"),
ObjectId("562a94d381cb9f1cd6eb0e1b"),
ObjectId("562a94d381cb9f1cd6eb0e1c")
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
db.stus.insert({name:"猪八戒",age:20,gender:"男"});
db.stus.insert(
[
{name:"白骨精",age:16,gender:"女"},
{name:"沙和尚",age:36,gender:"男"},
{name:"唐僧",age:18,gender:"男"}
]);
db.stus.insertOne({name:'六耳猕猴'})
db.stus.find();

ObjectId()
id name age gender
61809e6c89473f3a5dcfbbe1 孙悟空 18 男
6180a15645200000cb005ea3 猪八戒 20 男
6180a1e145200000cb005ea4 蜘蛛精 16 女
6180a20445200000cb005ea5 白骨精 16 女
6180a20445200000cb005ea6 沙和尚 36 男
6180a20445200000cb005ea7 唐僧 18 男
6180a4b545200000cb005eaa 六耳猕猴
1
2
3
4
5
6
7
db.<collection>.find() #查询当前集合中的所有符合条件的文档
db.<collection>.findOne() #用来查询当前集合中符合条件的第一个文档
db.<collection>.find({}).count()#用来查询当前结果的数量
#{属性:查询值} ,区分
db.stus.findOne({name:'孙悟空'})
db.stus.find({age:18,name:'唐僧'})
db.stus.find({age:18}).count() #2

修改文档

语法格式:
1
2
3
4
5
6
7
8
9
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如$,$inc…)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

db.<collection>.update(查询条件,修改对象) #默认情况下会使用新对象来替换旧的对象
#注意:update 默认只改一个
db.stus.update({name:"孙悟空"},{age:20}) # 61809e6c89473f3a5dcfbbe1 20
#需要使用修改符 $set 可以用来修改和设置
#$set 修改字段
db.stus.update(
{"_id":ObjectId("61809e6c89473f3a5dcfbbe1")},
{$set:
{
name:"孙悟空",
gender:"男",
address:"武汉市"
}
}
)
#$unset 删除字段
db.stus.update(
{"_id":ObjectId("61809e6c89473f3a5dcfbbe1")},
{
$unset:{
address:""
}
}
)
db.<collection>.updateMany() #同时修改多个符合条件的文档
db.<collection>.updateOne() #修改一个符合条件的文档

删除文档

语法格式:
1
2
3
4
5
6
7
db.collection.remove(
<query>,
{
justOne: <boolean>, #true 只删除一个
writeConcern: <document>
}
)
1
2
3
4
5
6
7
8
#删除  很少用 数据库一般不会删除
db.<collection>.remove({}); #清空集合 性能很差 一个一个删
#可以根据条件来删除文档,传递的条件和方式和find()一样,默认情况删除多个
db.<collection>.deleteOne();
db.<collection>.deleteMany();

db.<collection>.drop();#直接删除集合
db.dropdatabase();
1
2
3
db.stus.remove({"_id":ObjectId("61809e6c89473f3a5dcfbbe1")})
db.stus.remove({age:18},true)
db.stus.find({isDel:0})