文章目录
MongoDB菜鸟教程地址
为什么使用MongoDB
1.面想文档存储,BJSON形式数据
2.支持丰富的查询功能
3.索引可以在任意列建立
4.高可扩展性
5.易于调试,易于扩展
6.使用内存作为工作区,存取效率高
Windows MongoDB安装
MongoDB下载地址:https://www.mongodb.com/download-center/community
可视化界面下载地址:https://www.mongodb.com/try/download/compass
MongoDB下载后,需要在根目录创建data\db文件,用于存放数据库,MongoDB不会自动创建这个目录。
执行 bin 目录,下的 mongod.exe 启动 MongoDB。
启动后会出现这个窗口,标红的位置,就是端口号,默认:27017.
然后打开可视化界面目录下的 MongoDBCompass.exe,创建连接,就可以看到 MongoDB 的初始数据库了。
MongoDB的基本概念
1.数据库:一个 MongoDB 可以创建多个数据库,数据存储在开始创建的data目录中。每个数据库都有自己的集合和权限。
2.集合:相当于 mysql 的表。集合没有固定的结构,存入什么数据都可以,但是通常我们会插入有关联性的数据。
3.文档:相当于 mysql 中的数据。
如下图:
my就是数据库,下面有user 和 comments 两个集合,其中的数据就是文档
MongoDB的基本命令
数据库操作
查看所有数据库:show dbs 此命令展示所有数据库
创建数据库:use t_database 如果数据库 t_database 不存在,则创建 t_database 数据库,否则切换到 t_database 数据库
删除数据库:查看了db.dropDatabase() db 为切换到指定数据库后的实例对象(本人理解),将切换到的数据库删除
集合操作
查询所有集合:show collections 此命令展示所有 当前数据库 的集合
新增集合:db.createCollection(name, options) name为集合名称,options: 可选参数。可选参数包括:capped:如果为true,集合有固定大小,size:集合最大值,max:包含文档的最大数量
例如:
db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
删除集合:db.collection.drop() 如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。
文档操作
查询所有文档:db.collection.find() collection 是集合名称
新增文档:db.collection .insert(document) 或 db.collection.save(document)
例子:
db.collection.insert({userName: '张三',
nage: '20',
address: '北京',
company: '阿里'
})
更新文档:b.collection.update( query,update,multi)
query:update 的条件,相当于 mysql 的 where
update:update 的更新操作符,相当于 mysql 的 set
multi:update 如果找到多条记录,默认只更新一条,设置为 true 则全部更新
例如:
db.collection.update({'name':'张三'},{$set:{'name':'李四'}},{multi:true})
删除文档:db.collection.remove(query,justOne)
query:remove 的条件,相当于 mysql 的 where
justOne:默认false,删除所有匹配的文档。 设置为true,则只删除一个
例如:
db.collection.remove({'name':'张三'})
如果remove后面什么也不写。则删除全部 db.collection.remove()
文档查询
查询文档所有:db.collection.find()
查询一个文档:db.collection.findOne()
查询姓名叫张三的文档:db.collection.find({name : “张三”}) , ()里面 就相当于 mysql 的 where 条件,等价于 mysql name = “张三” 的写法,如果有多个查询条件,就往后加。
写法:db.collection.find({key1:value1, key2:value2})
模糊查询:db.collection.find({name : /张三/}) /张三/ 等价于 mysql 的 %张三%
查询年龄小于等于20的文档:
db.collection.find({age:{$lte:NumberInt(20)}})
由于 MongoDB 的文档数据没有数字类型,需要用 NumberInt() 转成数字类型。
//等于:
{age:NumberInt(20)});
//小于:
{age:{$lt:NumberInt(20)}}) ;
//大于:
{age:{$gt:NumberInt(20)}});
//小于等于:
{age:{$lte:NumberInt(20)}}) ;
//大于等于:
{age:{$gte:NumberInt(20)}});
and条件:
db.collection.find({$and:[{name:"张三"},{age:NumberInt(20)}]})
等价于
db.collection.find({age:NumberInt(20),name:"张三"} )
or条件:
db.collection.find({$or:[{name:"张三"},{age:NumberInt(20)}]})
复合条件
{$or:[{$and:[{name:"李四"},{age:NumberInt(21)}]},{name:/张/}]}
springboot 集成 MongoDb
首先我用可视化工具创建了一个名字叫 My 的数据库,然后在 My 数据库下创建了一个 comments 集合
增加 maven 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
在yml配置文件中配置 MongoDb
spring:
data:
mongodb:
host: localhost #服务器域名,我用的本机
database: my #数据库名称
port: 27017 #端口号,默认是 27017 ,可以不写
创建集合实例,由于 MongoDb 集合没有固定结构,所以一个集合可能会有很多实例。
//@Document表明了实体是文档类型
//collection = "comments" 指定了 集合的名称,如果和 集合名称一样,此处可以省略
@Document(collection = "comments")
@Data
public class Comments {
private String id;
private String acticleid;
private String parentid;
private String content;
private String status;
private String userId;
private String nickName;
private Integer likeNum;
private Integer replyNum;
private Date createTime;
新键dao层
/**
* 此类目的主要是继承 MongoRepository 调用其中的接口,实现 CURD
*/
@Repository
public interface MongoDbDao extends MongoRepository<Comments,String> {
}
创建service
@Service("mongoDbService")
public class MongoDbServiceImpl implements MongoDbService {
@Autowired
private MongoDbDao mongoDbDao;
/**
* 新增
* @param comments
*/
@Override
public void insert(Comments comments) {
mongoDbDao.insert(comments);
}
/**
* 查询所有
* @return
*/
@Override
public List<Comments> queryAll() {
return mongoDbDao.findAll();
}
/**
* 根据id查询
* @param id
* @return
*/
@Override
public Optional<Comments> queryById(String id) {
return mongoDbDao.findById(id);
}
/**
* 根据id删除
* @param id
*/
@Override
public void deleteById(String id) {
mongoDbDao.deleteById(id);
}
}
使用测试类进行测试
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MongoServiceTest.class)
public class MongoServiceTest extends MongoDbApplication {
@Autowired
private MongoDbService mongoDbService;
@Test
public void insert() {
Comments comments = new Comments();
comments.setLikeNum(0);
comments.setContent("这是一个评论");
comments.setNickName("张三");
comments.setCreateTime(new Date());
comments.setParentid("0");
comments.setReplyNum(0);
comments.setStatus("1");
comments.setUserId("10");
comments.setActicleid("1");
mongoDbService.insert(comments);
}
@Test
public void queryAll() {
System.out.println(mongoDbService.queryAll());
}
@Test
public void queryById() {
System.out.println(mongoDbService.queryById(""));
}
@Test
public void deleteById() {
mongoDbService.deleteById("");
}
}
如果 where 条件不想用id,在dto新增 方法
先写 List find 就会出现如下图,选择查什么
然后选择以后后会接着选条件
如果这些还不能满足你的要求,那就用 StringBoot 自己集成的 MongoTemplate,总有一款你喜欢的