学习mongoDB与mongoose的简单入门运用

什么是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);
})
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值