我们先来了解一下非关系型数据库和关系型数据库,首先需要了解一下关系型数据库,比如,我们所熟知的 Oracle、mysql等。
关系型数据库和非关系型数据库
- 实质: 非关系型数据库的实质,其实非关系型数据库是传统关系型数据库的功能的阉割版,通过减少用不到的或者很少使用的功能,来大幅度提高产品的性能。
- 价格:目前的非关系型数据库基本都是免费的
- 功能: 实际开发中,很多业务需求,其实并不需要完整的关系型数据库功能,非关系型数据库的功能就足够使用了。这种情况下,使用性能更高、成本更低的非关系型数据库当然是更明智的选择。
MongoDB简介:
Mongodb 是一个基于分布式文件存储的数据库,由C++编写。 目的是为WEB应用提供扩展的高性能的数据存储方案。它是介于关系型和非关系型数据库中间的产品,他支持的数据结构比较松散,是类似于json的Bson格式,因此可以存储比较复杂的数据类型。
mongo shell
// 启动mongodb 之后var x='Hello World'print(x) // 注意这里虽然执行的时js指令,但是不能使用console.log , 只能使用print()function jspang(){ return 'JSPang';}print(jspang())
MongoDB的存储结构
以前我们的关系型数据库的数据结构都是顶层是库,库下面是表,表下面是数据。但是MongoDB有所不同,库下面是集合,集合下面是文档,可以看下面这张图进行了解一下。
基础Shell命令
- show dbs :显示已有数据库,如果你刚安装好,会默认有local、admin(config),这是MongoDB的默认数据库,我们在新建库时是不允许起这些名称的。
- use admin: 进入数据库,也可以理解成为使用数据库
- show collections: 显示数据库中的集合
- db:显示当前位置,也就是你当前使用的数据库名称,这个命令算是最常用的,因为你在作任何操作的时候都要先查看一下自己所在的库,以免造成操作错误。
用js文件写mongo命令
首先启动 mongodb
// getTask.jsvar username = "zjj";var time = Date.parse(new Date());var jsonData = {"loginUser": username, "loginTime": time}var db = connect('login') // 连接数据库db.login.insert(jsonData)print('log print success')
在该目录下执行mongo getTask.js
批量注入
// 批量数据插入是以数组的方式进行的db.test.insert([ {"_id":1}, {"_id":2}, {"_id":3}]);// 注意一次插入不要超过48M,向.zip和大图片什么的尽量用静态存储,MongoDB存储静态路径就好,这也算是一个规则。// 使用数组批量插入的效率比使用循环插入的效率高的多
Update常见错误
// demo01.jsvar workmate1={ name:'JSPang', age:33, sex:1, job:'前端', skill:{ skillOne:'HTML+CSS', SkillTwo:'JavaScript', SkillThree:'PHP' }, regeditTime:new Date()} var workmate2={ name:'ShengLei', age:30, sex:1, job:'JAVA后端', skill:{ skillOne:'HTML+CSS', SkillTwo:'J2EE', SkillThree:'PPT' }, regeditTime:new Date()} var workmate3={ name:'MinJie', age:20, sex:1, job:'UI设计', skill:{ skillOne:'PhotoShop', SkillTwo:'UI', SkillThree:'Word+Excel+PPT' }, regeditTime:new Date()} var db=connect('company')var workmateArray=[workmate1,workmate2,workmate3]db.workmate.insert(workmateArray)print('[SUCCESS]: The data was inserted successfully.');// 构造数据// 运行demo01mongo> load('./demo01.js');
var db=connect('company')db.workmate.update({name:'MinJie'},{sex:0}) print('[update]: The data was updated successfully');// 我们会发现需要修改的那条数据已经被大变样了,只剩下了只有 sex:0
正确的修改方法
// demo02.jsvar db=connect('company') var workmate3={ name:'MinJie', age:20, sex:0, job:'UI设计', skill:{ skillOne:'PhotoShop', SkillTwo:'UI', SkillThree:'Word+Excel+PPT' }, regeditTime:new Date()}db.workmate.update({name:'MinJie'},workmate3) print('[update]: The data was updated successfully');
但是如果每次都这么来改,多麻烦呢。我们平时大多还是使用update
修改器来修改
下一节我们来认识update修改器