1.拉取镜像

docker pull mongo:4.0.3

2.创建容器

docker create --name mongodb --restart=always -p 27017:27017 -v mongodb:/data/db mongo:4.0.3

3.启动容器

docker start mongodb

4.进入容器

docker exec -it mongodb /bin/bash

5.使用MongoDB客户端进行操作

mongo
	 
	 > show dbs				#查询所有的数据库
	 
	 > use testdb			#通过use关键字切换数据库
#注:在MongoDB中,数据库是自动创建的,通过use切换到新数据库中,进行插入数据即可自动创建数据库
	 
	 > show tables			#查看表(tables和collections一样)
	 
	 > db.user.drop()		#删除集合(表)
#注:如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。
	 
	 > use testdb 			#先切换到要删除的数据中
	 > db.dropDatabase()	#删除数据库(需要先切换到要删除的数据库)

6.数据库以及表的操作

插入数据(insert和save一样)

db.user.insert({id:1,name:'zhangsan'}) 

db.user.save({id:1,name:'zhangsan'})

更新数据(更新不存在的数据,会新增字段))

db.user.update({id:1},{$set:{age:22}},true)
 
		# 参考说明:
		#	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 :可选,抛出异常的级别。

删除数据

db.user.remove({age:25})		#删除所有符合条件的数据
db.user.remove({age:22},true)	#删除1条数据
db.user.remove					#删除所有数据
		 
#为了简化操作,官方推荐使用deleteOne()与deleteMany()进行删除数据操作。
db.user.deleteOne({id:1})
db.user.deleteMany({})  #删除所有数据
		 
		# 参考说明:
		#	db.collection.remove(
		#	   <query>,
		#	   {
		#		 justOne: <boolean>,
		#		 writeConcern: <document>
		#	   }
		#	)
				 
		# query :(可选)删除的文档的条件。
		# justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
		# writeConcern :(可选)抛出异常的级别。

查询数据

db.user.find()  #查询全部数据
db.user.find({},{id:1,username:1})  #只查询id与username字段
db.user.find().count()  #查询数据条数
db.user.find({id:1}) #查询id为1的数据
db.user.find({age:{$lte:21}}) #查询小于等于21的数据
db.user.find({age:{$lte:21}, id:{$gte:2}}) #and查询,age小于等于21并且id大于等于2
db.user.find({$or:[{id:1},{id:2}]}) #查询id=1 or id=2

#分页查询:Skip()跳过几条,limit()查询条数
db.user.find().limit(2).skip(1)  #跳过1条数据,查询2条数据

db.user.find().sort({id:-1}) #按照age倒序排序,-1为倒序,1为正序

		# 参考说明:
		# db.user.find([query],[fields])
				 
		# query :可选,使用查询操作符指定查询条件
		# fields :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值,只需省略该参数即可(默认省略)。

7.索引

#查看索引
db.user.getIndexes()
#创建索引
db.user.createIndex({'age':1})
#删除索引
db.user.dropIndex("age_1")
#删除除了_id之外的索引
db.user.dropIndexes()
#创建联合索引
db.user.createIndex({'age':1, 'id':-1})
#查看索引大小,单位:字节
db.user.totalIndexSize()