mongodb简单入门教程
程序员文章站
2024-01-22 22:57:04
...
简介
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();
上一篇: mongodb入门教程之命令汇总
下一篇: mongodb的复制集及搭建