什么是mongoDB
官方话是这样说的
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
而我是这样理解的
MongoDB是目前最流行的noSQL数据库之一,MongoDB的一条记录叫做文档(document),它是一个包含多个字段的数据结构,很类似于JSON格式。
例如:
[ { age: 22,
email: 'zhangsan@qq.com',
_id: 5c0f59053033271a94b4ad0b,
name: '张三',
time: 2018-12-11T06:28:21.769Z,
__v: 0 } ]
mongoDB与mysql的区别
MySQL是关系型数据库。
优势:
在不同的引擎上有不同 的存储方式。
查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。
开源数据库的份额在不断增加,mysql的份额页在持续增长。
缺点:
在海量数据处理的时候效率会显著变慢。
Mongodb是非关系型数据库(nosql ),属于文档型数据库。文档是mongoDB中数据的基本单元,类似关系数据库的行,多个键值对有序地放置在一起便是文档,语法有点类似javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。
存储方式:虚拟内存+持久化。
查询语句:是独特的Mongodb的查询方式。
适合场景:事件的记录,内容管理或者博客平台等等。
架构特点:可以通过副本集,以及分片来实现高可用。
数据处理:数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,将数据存储在物理内存中,从而达到高速读写。
成熟度与广泛度:新兴数据库,成熟度较低,Nosql数据库中最为接近关系型数据库,比较完善的DB之一,适用人群不断在增长。
优点:
快速!在适量级的内存的Mongodb的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。高扩展性,存储的数据格式是json格式!
缺点:
不支持事务,而且开发文档不是很完全,不完善。
如何应用mongoDB,可以看阮一峰的博客:
http://javascript.ruanyifeng.com/nodejs/mongodb.html
这网站写的十分的详细,下面是我们的重点内容。
什么是mongoose?
mongoose其实就是对mongoDB的封装,类似于jquery与js的关系
mongoose的安装
npm install mongoose
var mongoose = require('mongoose') //加载模块
DB_URL = 'mongodb://localhost:27017/datadb' //连接的路径-'mongodb://localhost:27017/数据库名字'
mongoose.connect(DB_URL, {useNewUrlParser: true}) //后面一定要加{useNewUrlParser: true},否则会报警告
var db = mongoose.connection;//连接数据库
//下面就进行判断,(连接成功,连接失败,连接断开)
db.on('connected', function () {
console.log('Mongoose connection open to ' + DB_URL)
})
db.on('error', function (err) {
console.log('Mongoose connection error:' + err)
})
db.once('disconnected', function () {
console.log('Mongoose connection disconnected')
})
//定义Schema,描述该集合有哪些字段,哪些类型,只有Schema中定义过的,才能被放入数据库中
var PersonSchema = new mongoose.Schema({
name: {type: String},
age: {type: Number, default: 0},
time: {type: Date, default: Date.now},
email: {type: String, default: ''}
})
var PersonModel = db.model('people', PersonSchema);
注意
mongoose是通过model来创建mongodb中对应的collection的,
mongoose在内部创建collection时将我们传递的collection名(‘people’)小写化,同时如果小写化的名称后面没有字母——s,则会在其后面添加一s,针对我们刚建的collection,则会命名为:peoples。
var personEntity = new PersonModel({
name: "老王",
age: 22,
email: "laowang@qq.com"
});
personEntity.save(function (error, doc) {
if (error) {
console.log("error:" + error);
} else {
console.log(doc);
}
})
而我们会生成一个数据
{ age: 22,
email: 'laowang@qq.com',
_id: 5c0f62e3f284b229cc36b7aa,
name: '老王',
time: 2018-12-11T07:10:27.107Z,
__v: 0 }
我们学习一下使用mongoose,来进行数据的增删改查
增
我们是利用save方法来进行增加的
例如
var personEntity = new PersonModel({
name: "小鸟",
age: 22,
email: "laowang@qq.com"
});
personEntity.save()
删
PersonModel.deleteOne({name:'小鸟'},function (err,docs) {
console.log(docs);
})
改
var update ={$set :{age:100}}//我们要改变的数据
PersonModel.updateOne({name:'小鸟'},update,{multi:true},function (error) { //匹配数据库有name是小鸟的数据
if (error){
console.log(error);
} else {
console.log('update sucess');
}
})
查
PersonModel.find({age: {$gt: 50}}, function (err, docs) { //查询age>50的数据,让那个集合的name属性加字符串136
docs.forEach(function (item, index, arr) {
item.name += '136';
item.save()
})
})
PersonModel.find({"name":{"$in":"小鸟136"}},{name:2000, age:2000, _id:0},function(err,docs){
//查询name=='小鸟136'的所有数据,只让他显示name跟age属性,上面的name跟age数字是随便写的
console.log(docs);
})