mongodb简单入门教程

简介

mongoDB是什么呢?: 学就完事了,哪里那么多废话。

在这里插入图片描述

一 安装

官网: https://www.mongodb.com/try/download/community

1 下载windows版本安装包,一直点击下一步即可。

安装目录选择: G:\software\monggodb
在这里插入图片描述

2 启动mongodb

到安装目录下: 
cd G:\software\monggodb\Server\4.4\bin
创建此目录下的文件夹,否者无法启动
G:\software\monggodb\data\dbs
执行命令: 
G:\software\monggodb\Server\4.4\bin\mongod --dbpath G:\software\monggodb\data\dbs

出现日志目录即可
在这里插入图片描述

二 NoSQL Manager for MongoDB安装以及使用

1 下载NoSQL Manager for MongoDB软件进行安装

一直下一步即可

2 Manager 连接mongodb

首次连接无需密码
在这里插入图片描述

3 连接之后调出shell界面

在这里插入图片描述

4 尝试执行如下命令

给数据库创建角色
	admin数据库	use admin;
	管理员权限	db.createUser({user:"root",pwd:"123456",roles:[{role:"root",db:"admin"}]})
	登录验证		db.auth("root","123456")

	testDatabase数据库	use testDatabase;
	读写权限		db.createUser({user:"test",pwd:"test",roles:["readWrite"]})
	登录验证		db.auth("test","test")

	显示当前数据库用户	db.getUsers()
	删除指定用户	db.dropUser("test")

目前为止你已经可以出师啦。

三 指令集合-可跳过次章节、直接看四


--数据库
显示所有数据库		show databases;
切换数据库		use kknewyixue
查看所有数据库		show dbs;
删除数据库		
			use 数据库名称	先切
			db.dropDatabase()	后删

给数据库创建角色
	admin数据库	use admin;
	管理员权限	db.createUser({user:"root",pwd:"123456",roles:[{role:"root",db:"admin"}]})
	登录验证		db.auth("root","123456")

	testDatabase数据库	use testDatabase;
	读写权限		db.createUser({user:"test",pwd:"test",roles:["readWrite"]})
	登录验证		db.auth("test","test")

	显示当前数据库用户	db.getUsers()
	删除指定用户	db.dropUser("test")

--集合()
删除全部集合()		db.collection.drop()
删除某一个集合()内容	db.集合名.drop;
查看所有集合()		show tables 或者 show collections
创建集合()		db.createCollection("集合名")
			db.createCollection("集合名", { capped : true, autoIndexId : true, size : 
   6142800, max : 10000 } )

--文档(记录)
查询所有文档		db.集合名.find().pretty({})
查找一个			db.集合名.findOne() 
条件字段搜索		db.集合名.find( {   "title" : "MongoDB 教程", 	tags: ['mongodb', 'database', 'NoSQL']  })
条件语句
	等于		{"by":"菜鸟教程"}
	小于($lt)		{"likes":{$lt:50}}
	小于等于($lte)	{"likes":{$lte:50}}
	大于($gt)		{"likes":{$gt:50}}	db.col.find({x:{$gte:5}}).pretty();
	大于等于($gte)	{"likes":{$gte:50}}
	不等于($nt)	{"likes":{$ne:50}}
	AND(使用逗号)	{"by":"菜鸟教程", "title":"MongoDB 教程"}
	OR($or)		{$or: [{key1: value1}, {key2:value2}]}
	and和or联合使用	{"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}

操作符(数据类型)
	指定数据类型string	db.col.find({"title" : {$type : 2}})	或 db.col.find({"title" : {$type : 'string'}})
Limit和skip方法		db.集合名.find().limit(数量)	db.col.find().limit(2).pretty();	
	只显示第二条数据	db.集合名.find().skip(数量)	db.集合名.find().skip(1)
排序( 1 为升序,-1 是降序)	db.集合名.find().sort({KEY:1})
skip(), limilt(), sort()三个放在一起执行的时候,
	执行的顺序是先 sort(), 
	然后是 skip(),
	最后是显示的 limit()

MongoDB 索引
	创建索引		db.集合名.createIndex(keys, options)	升序创建索引 db.col.createIndex({"title":1})
	多字段索引	db.集合名.createIndex({"title":1,"description":-1})
	查看集合索引	db.集合名.getIndexes()
	查看集合索引大小	db.集合名.totalIndexSize()
	删除集合所有索引	db.集合名.dropIndexes()
	删除集合指定索引	db.集合名.dropIndex("索引名称")
MongoDB 聚合
	格式		db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
	计算每个作者文章数	db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])	作者先分类,再聚合
	$sum		计算总和
	$avg		计算平均值
	$min		获取集合中所有文档对应值得最小值。
	$max		获取集合中所有文档对应值得最大值
	$push		在结果文档中插入值到一个数组中
	$addToSet	在结果文档中插入值到一个数组中,但不创建副本
	$first		根据资源文档的排序获取第一个文档数据
	$last		根据资源文档的排序获取最后一个文档数据
管道的概念
	$project(中间表)	db.article.aggregate( { $project : { _id : 0 , title : 1 , author : 1 , }}  );
	$match(过滤器)	db.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } },  { $group: { _id: null, count: { $sum: 1 } } }  ] );
	$skip:		在聚合管道中跳过指定数量的文档,并返回余下的文档。
	$unwind:	将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
	$group:		将集合中的文档分组,可用于统计结果。
	$sort:		将输入文档排序后输出。
	$geoNear:	输出接近某一地理位置的有序文档

MongoDB 复制(副本集)
	主节点		负责处理客户端请求,其余的都是从节点
	从节点		从主节点中复制数据

MongoDB 分片
	Shard		存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障
	Config Server	mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息
	uery Routers	前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用

MongoDB数据备份		mongodump -h dbhost -d dbname -o dbdirectory
			mongorestore -h <hostname><:port> -d dbname <path>

MongoDB 监控		
	目录下		mongodb\bin>mongostat
			mongodb\bin>mongotop

MongoDB 关系		存主键_id
	一对一
	一对多
	多对一
	多对多
			var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})
			var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})

MongoDB 数据库引用
	DBRef的形式	{ $ref : , $id : , $db :  }
	$ref:集合名称
	$id:引用的id
	$db:数据库名称,可选参数
	
MongoDB 覆盖索引查询
	创建索引		db.users.ensureIndex({gender:1,user_name:1})
	索引查询		db.users.find({gender:"M"},{user_name:1,_id:0})
	
MongoDB 查询分析
	使用 explain()	db.users.find({gender:"M"},{user_name:1,_id:0}).explain()
	使用 hint()		db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1})

插入文档(集合不存在自动创建)	db.集合名.insert({"name1":"冰冰"}) 
			db.集合名.replaceOne({"name1":"冰冰"})
插入对象			db.集合名.insert({
				title: 'MongoDB 教程', 
				description: 'MongoDB 是一个 Nosql 数据库',
				by: '菜鸟教程',
				url: 'http://www.runoob.com',
				tags: ['mongodb', 'database', 'NoSQL'],
				likes: 100
			})
插入多条记录 方式一		var res = db.col.insertMany([{"b": 3}, {'c': 4}])	res
	    方式二		var arr = []; 	for(var i=1 ; i<=20000 ; i++){ arr.push({num:i}); } 	db.numbers.insert(arr);
更新文档
			db.集合名.update(
				<query>,
				<update>,
				{ upsert: <boolean>, multi: <boolean>, writeConcern: <document> }
			)
	例如		db.集合名.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
插入或者更新(_id是否存在)	db.集合名.save()

删除文档 			db.集合名.remove( <query>,  <justOne> )
	条件删除		deleteMany()
			db.集合名.remove({'title':'MongoDB 教程'})		
	删除第一条	deleteOne()
			db.集合名.remove({'title':'MongoDB 教程'}1)	
释放空间			db.repairDatabase()

四 springboot操作mongodb-重点

springbootData官网: springbootData官网-点我

1 使用spring-boot-starter-data-mongodb操作mongodb

1.1 导出依赖

       <!-- mongodb -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
            <version>2.3.0.RELEASE</version>
        </dependency>

1.2 配置

# 单机版
#spring.data.mongodb.host=localhost
#spring.data.mongodb.port=27017
#spring.data.mongodb.database=testDatabase
#spring.data.mongodb.username=test
#spring.data.mongodb.password=test
# 权限验证数据库-可选
#spring.data.mongodb.authentication-database=admin

# 集群版
#spring.data.mongodb.uri=mongodb://test:test@localhost:27017,localhost:27018/testDatabase
# 集群版-指定权限验证数据库为admin
#spring.data.mongodb.uri=mongodb://test:test@localhost:27017,localhost:27018/testDatabase?authSource=admin

1.3 实体类

@Data
@Document(collection = "User")
public class User implements Serializable {
    private static final long serialVersionUID = -3258839839160856613L;
    @Field("id")
    private Integer id;
    @Field("UserName")
    private String userName;
    @Field("passWord")
    private String passWord;


    @Override
    public String toString() {
        return "UserEntity{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", passWord='" + passWord + '\'' +
                '}';
    }
}

1.4 操作mongodb

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 测试mongodb插入
     */
    public void mongodbInsert() {

        User user = new User();
        user.setId(1);
        user.setUserName("爸爸");
        user.setPassWord("男");
        mongoTemplate.insert(user);
        user.setId(2);
        user.setUserName("妈妈");
        user.setPassWord("女");
        mongoTemplate.insert(user);
        log.info("插入成功!");
        List<User> all = mongoTemplate.findAll(User.class);
        if (all != null) {
            log.info("all:{}", all);
        }
    }

查询是否有数据:

use zhijiDatabase;

db.User.find().pretty();

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值