欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mongodb简单入门教程

程序员文章站 2024-01-22 22:57:04
...

简介

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

mongodb简单入门教程

一 安装

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

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

安装目录选择: G:\software\monggodb
mongodb简单入门教程

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

出现日志目录即可
mongodb简单入门教程

二 NoSQL Manager for MongoDB安装以及使用

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

一直下一步即可

2 Manager 连接mongodb

首次连接无需密码
mongodb简单入门教程

3 连接之后调出shell界面

mongodb简单入门教程

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();

mongodb简单入门教程

相关标签: mongodb java