初次使用MongoDB和mongoose

16 篇文章 0 订阅
9 篇文章 0 订阅

MongoDB和mongoose

Mongoose是MongoDB的一个对象模型工具,是基于node-mongodb-native开发的MongoDB nodejs驱动,可以在异步的环境下执行。同时它也是针对MongoDB操作的一个对象模型库,封装了MongoDB对文档的的一些增删改查等常用方法,让NodeJS操作Mongodb数据库变得更加灵活简单。

它的作用就是,在程序代码中,定义一下数据库中的数据格式,然后取数据时通过它们,可以把数据库中的 document 映射成程序中的一个对象,这个对象有 .save .update 等一系列方法,和 .title .author 等一系列属性。在调用这些方法时,odm 会根据你调用时所用的条件,自动转换成相应的 mongodb shell 语句帮你发送出去。自然地,在程序中链式调用一个个的方法要比手写数据库操作语句具有更大的灵活性和便利性。

const mongoose = require('mongoose')
const db = 'mongodb://localhost/jinghong'

// 用原生Promise代替mongoose中的promise
mongoose.Promise = global.Promise

exports.connect = () => {
  let connectLimit = 0
  return new Promise((resolve, reject) => {
    if (process.env.NODE_ENV !== 'production') {
      mongoose.set('debug', true)
    }

    mongoose.connect(db, { useNewUrlParser: true })

    mongoose.connection.on('disconnected', () => {
      if (connectLimit < 5) {
        // 断开重连
        mongoose.connect(db,  { useNewUrlParser: true })
        connectLimit ++
      } else {
        const err = new Error('链接失败超过五次')
        reject(err)
      }
    })

    mongoose.connection.on('error', err => {
      reject(err)
    })

    // 链接成功
    mongoose.connection.once('open', () => {
      const Dog = mongoose.model('Dog', {
        name: String
      })
      const catty = new Dog({
        name: 'supper catty'
      })

      catty.save().then(() => {
        //存储成功
        console.log('catty存储成功')
      })

      resolve('链接成功')
    })
  })
}

其中

const db = ‘mongodb://localhost/jinghong’

localhost 是 mongoDB 所在的地址,端口号省略则默认连接 27017;jinghong 是数据库的名称。

异步调用:

;(async() => {
  try{
    const status = await connect()
    console.log(status)
  } catch (err) {
    console.log(err)
  }
})()


链接失败的时候还可以这样去写

mongoose.connection.on('error', err => {
   throw new Error('制作错误')
})


查看MongoDB存储的数据

在命令行中输入:mongo,接着输入下图所示相关信息即可
这里写图片描述


MongoDB中document、collection、database三个概念



Mongoose中schema、model、entity三个概念

  • Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力
  • Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对
  • Entity : 由Model创建的实体,他的操作也会影响数据库
    它们之间的关系是Schema生成Model,Model创造Entity,Model和Entity都可对数据库操作造成影响,但Model比Entity更具操作性。Model对应collection,Entity对应docment
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB是一种开源的、面向文档的非关系型数据库管理系统,它使用JSON风格的文档代替了传统的行和列的存储方式。而Mongoose是一个Node.js的ORM框架,它提供了一些基于Schema的方法,使得我们可以在Node.js中更加方便地操作MongoDB数据库。 具体来说,MongoDBMongoose的区别主要体现在以下几个方面: 1. 数据库结构:MongoDB是面向文档的数据库,它的数据结构是以文档形式存储的,每个文档可以有不同的字段和数据结构。而Mongoose则是基于Schema进行存储,Schema是一种数据结构,描述了每个文档中包含哪些字段以及字段的数据类型。 2. 数据类型:MongoDB支持的数据类型比较简单,包括字符串、整数、浮点数、日期等基本数据类型,以及数组和嵌套文档等复杂数据类型。而Mongoose支持的数据类型更加丰富,包括枚举、正则表达式、缺省值等。 3. 数据验证:Mongoose提供了Schema验证机制,可以在保存数据之前对数据进行验证,验证不通过则无法保存。而MongoDB本身并没有提供数据验证功能。 4. 查询方式:MongoDB提供了强大的查询和聚合功能,可以进行复杂的数据查询和计算。而Mongoose在查询方面比较简单,主要是通过一些基本的查询方式来进行数据查询。 综上所述,MongoDBMongoose在很多方面都有所不同,但它们都是非常优秀的技术,可以帮助我们更好地管理和操作数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值