MongoDB是基于c++开发的,是一个基于分布式文件存储的开源数据库系统。
在高负载下添加更多的节点,保证服务器的性能。
该数据库为web应用提供可扩展性的高性能数据存储解决方案。
该数据库对数据存储方式:键值对组成,类似于json
MongoDB 是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB 对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。
MongoDB是一个面向文档存储的数据库,操作容易。
可以在MongoDB记录中设置任何属性的索引来实现更快的排序。
可以通过本地或网络创建数据镜像,这样该数据库更具有扩展性。
负载增加,该数据库可以分布在计算机网络的其他节点上(就是分片)。
MongoDB的查询指令使用json形式。
MongoDB 的适合对大量或者无固定格式的数据进行存储,比如:日志、缓存等。对事物支持较弱,不适用复杂的多文档(多表)的级联查询。
使用这个博主的下载链接很方便速度也快
https://blog.csdn.net/jdmxi/article/details/79492049
尽量下载高一些的版本,因为低版本的要自己创建日志文件夹和数据库文件夹,高版本的会自动给你部署好。你是安装好后就有这个文件夹可跳过创建他们的步骤
我下载的是免安装的,解压后直接可用 mongodb-win32-x86_64-2012plus-4.2.18-rc0-12-gbe2c559,我这个要手动创建日志文件夹和数据库文件夹
找到安装包中的bin文件中的mongo.exe,
点击mongo.exe就可启动了(注意,该安装路径尽量不要出现中文,可能会出错)
这有可能会出现运行闪退情况,以下是解决方案:
一次性方案:
1)首先再D盘新建一个文件夹test
2)在mongodb/bin目录下按住shift+鼠标右键,选择在此处打开Powershell窗口,在powershell内执行命令:
.\mongod -dbpath d:\test
此时mongod.exe程序就不会闪退了
3)双击mongo.exe程序,即可打开mongo shell,然后就可以快乐的玩耍了。
所谓一次性解决,就是在你关闭mongod窗口后,你还是得按照上面的方法启动mongod程序,比较麻烦,直接双击mongod.exe还是会闪退。
永久解决方案:
小编仔细的翻阅了官方文档,mongod程序启动时,默认存储数据的目录是D:\data\db,如果没有该目录就会闪退,所以最简单的办法就是在D盘新建目录:D:\data\db
是不是很简单呢,这样就可以直接双击mongod.exe启动MongoDB了,再双击mongo.exe就能玩耍了。
我认为比较好的方案:
通过分析可知是mongodb找不到默认的存储数据路径导致的闪退,那我们可以给他指定一个路径,不使用默认的路径就好了,具体操作在下面手动创建db文件夹后展示。
但我这个是免安装的版本,需要自己部署log日志文件夹和数据库data文件夹
自己手动创建data文件夹,然后在data中创建db文件夹和log文件夹
然后在log文件夹下创建mongo.log文件
然后在bin文件夹下打开cmd,输入命令:
//我创建数据存放位置是D:\programfiles\MongoDBPAth\data\db
mongod --dbpath D:\programfiles\MongoDBPAth\data\db
这样就指明了mongodb的数据路径,就解决了运行闪退问题了!这就是我的解决闪退方案!
然后就看到刚创建的db文件夹下有好多文件了
到此处,该数据库基本可以使用了,但使用时每次都要留一下窗口,不能关,比较繁琐,可以使用配置文件解决这个问题
在bin文件夹所在的路径下,手动创建一个配置文件mongo.config
该配置文件中写如下内容:
#你配置的数据存放路径
dbpath=D:\programfiles\MongoDBPAth\data\db
#你配置的日志文件存放路径
logpath=D:\programfiles\MongoDBPAth\data\log\mongo.log
然后在bin文件夹下打开cmd,输入命令:
//注意这里写你的配置文件的路径
mongod --config D:\programfiles\MongoDBPAth\mongo.config --install --serviceName "mongodb"
开启mongodb数据库和关闭命令(注意我没有配置全局环境变量,所以命令只能在安装的bin文件夹下才有用!)
启动命令:net start mongodb
停止命令:net stop mongodb
在默认情况下,mongod是监听在127.0.0.1之上的,任何客户端都可以直接连接27017,且没有认证。
默认情况下,mongodb没有启用的访问控制,因此没有默认的用户或密码。
(注意我没有配置全局环境变量,所以命令只能在安装的bin文件夹下才有用!)
//启动命令
net start mongodb
//停止命令
net stop mongodb
(注意我没有配置全局环境变量,所以命令只能在安装的bin文件夹下才有用!)
//进入数据库命令
mongo
浏览器访问 http://localhost:27017/ 可以看到如下画面
exit
//进入数据库
mongo
//创建用户管理员。
use admin
//然后按回车,再输入下面命令
//下面的admin是我创建的账号名字,adminpassword是我创建的账号密码,后边[]中的是角色设置userAdmin和userAdminAnyDatabase都是可以的,区别在于userAdmin角色是用于对单个数据库起作用,userAdminAnyDatabase角色是超级用户,对所有数据库起作用
db.createUser({ user: "admin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
use admin
db.auth("admin", "adminpassword")
可以看到当账号密码验证正确会出现1,反之是0;
这里说明我的账号创建并登录成功了。
//可以查看的库有很多,自带的有admin,test等 ,我这里查看admin库的账号
use admin
show users
//use DATABASE_NAME
//如果数据库不存在,则创建数据库,否则切换到指定数据库。
//我这里就创建一个myfirstmongo名字的数据库
use myfirstmongo
//使用db命令查看当前在那个数据库
db
show dbs
但发现我刚创建的数据库没有显示,这是因为该数据库还没有插入数据,不会显示,可以插入一些数据
以我刚创建的myfirstmongo数据库中插数据为例
这里{“name”:“我的第一个mongodb练习”}也可以看出mongodb的数据结构和json很像
db.myfirstmongo.insert({"name":"我的第一个mongodb练习"})
我们再看看数据库,发现他出现了
//查询数据库中所有的集合
show collections
//查询数据库中集合中的数据
db.集合名字.find()
我这里使用springboot项目和mongodb简单的使用,连接的数据库名也就用我刚创建的myfirstmongo数据库吧
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-mongodbartifactId>
dependency>
这里项目连接数据库的配置中账号密码有个坑!他和mysql数据库的账号不一样,我上边创建的账号是admin数据库中的账号,这里使用myfirstmongo数据库,用那个账号是连不上数据库的!我们需要在myfirstmongo数据库中也创建一个账号,操作和上边创建账号一样
在application文件中
#参数解释mongodb://root(userName):root(password)@localhost(ip地址):27017(端口号)/gis(collections/数据库)
spring.data.mongodb.uri=mongodb://my:mymongo@localhost:27017/myfirstmongo
#多个 IP 集群可以采用以下配置:
#spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/database
#spring boot操作mongo时添加日志查看mongodb执行语句
logging.level.org.springframework.data.mongodb.core = DEBUG
public class TestEntity {
private String name;
private String passWord;
public TestEntity() {
}
public TestEntity(String name, String passWord) {
this.name = name;
this.passWord = passWord;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
}
操作mongodb主要采用依赖包中的MongoTemple类
@Component
public class TestMongoDb {
//使用依赖中的mongodb模板类来操作
@Resource
public MongoTemplate mongoTemplate;
//将实体对象存入数据库
public void add(TestEntity testEntity){
mongoTemplate.save(testEntity);
}
//根据名字查找对象
public TestEntity findByName(String name){
//注意这里的Query是依赖包中的类,不要引错了
Query query=new Query(Criteria.where("name").is(name));
TestEntity testEntity=mongoTemplate.findOne(query,TestEntity.class);
return testEntity;
}
//修改对象(根据名字锁定对象修改对应密码)
public long update(TestEntity testEntity){
Query query=new Query(Criteria.where("name").is(testEntity.getName()));
Update update=new Update().set("passWord", testEntity.getPassWord());
//更新查询返回结果集的第一条
UpdateResult result=mongoTemplate.updateFirst(query,update,TestEntity.class);
//更新查询返回结果集的所有
// mongoTemplate.updateMulti(query,update,UserEntity.class);
if(result!=null)
return result.getMatchedCount();
else
return 0;
}
//删除对象
public void delete(String name){
Query query=new Query(Criteria.where("name").is(name));
mongoTemplate.remove(query,TestEntity.class);
}
}
@Controller
@RequestMapping("test")
//测试类
public class Test {
@Autowired
private TestMongoDb testMongoDb;
@GetMapping("/add")
//测试写数据
public void add(){
System.out.println("触发");
TestEntity testEntity=new TestEntity();
testEntity.setName("张三");
testEntity.setPassWord("123456");
testMongoDb.add(testEntity);
}
@GetMapping("/find")
//测试查数据
public void find(){
testMongoDb.findByName("张三");
}
@GetMapping("/update")
//修改数据
public void update(){
TestEntity testEntity=new TestEntity();
testEntity.setName("张三");
testEntity.setPassWord("666666666");
testMongoDb.update(testEntity);
}
@GetMapping("/delete")
//删除数据
public void delete(){
testMongoDb.delete("张三");
}
}
然后启动springboot项目,注意此时的mongodb也必须是处于启动状态,不然连不上!!
先用postman对添加的功能接口测试
然后查看后端控制台,可以看到该add已被执行
然后查看数据库中是否有张三这条数据,我这边使用的可视化界面查看的,也可以使用命令查看
感悟:通过自己调通mongodb可以很直观的发现该数据库是以集合的方式来存储数据和mysql等关系型数据库不一样,他不是一张张表,而是一条条实例,这样有一个很直观的好处就是数据之间联系不大,互不干扰。
最后希望我写的文章可以帮到你
参考:
https://blog.csdn.net/jdmxi/article/details/79492049
https://www.jianshu.com/p/a2437574a4bb
https://www.cnblogs.com/ityouknow/p/6828919.html
https://blog.csdn.net/u010649766/article/details/78498130
https://www.runoob.com/mongodb/mongodb-create-database.html