我们先来了解一下非关系型数据库和关系型数据库,首先需要了解一下关系型数据库,比如,我们所熟知的 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.js
var 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.js
var 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.');
// 构造数据
// 运行demo01
mongo
> load('./demo01.js');
var db=connect('company')
db.workmate.update({name:'MinJie'},{sex:0})
print('[update]: The data was updated successfully');
// 我们会发现需要修改的那条数据已经被大变样了,只剩下了只有 sex:0
正确的修改方法
// demo02.js
var 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修改器
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。