为了账号安全,请及时绑定邮箱和手机立即绑定

【金秋打卡】第7天 Mongoose 的基本用法

标签:
MongoDB Node.js

课程名称web前端架构师

课程章节:第14周 第八章 添加 Mongoose 以及 egg.js 插件原理

主讲老师:张轩

课程内容: Mongose 的基本用法

使用原生mongoDB 存在的问题

使用 原生的 mongoDB nodejs driver 数据结构以及操作过于灵活,使用起来也不是舒服。

解决

  • 建立在 native mongoDB nodejs driver 之上
  • 提出 Model,数据模型的概念,用来约束集合中的数据结构
  • 非常多扩展的内容
  • 它是一个 ODM(Object Document Mapping)工具。

谈谈 ORM

使用过关系型数据库的可能对这个比较熟悉

ORM 指的是 Object Relational Mapping
简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术。

优点

  • 不需要再去写晦涩的 SQL 语句,对于我们不是专门做数据库的人比较友好
  • 使用面向对象的方式操作数据,代码量少,语义性好,容易理解。比如
    • Classes 类- Tables
    • Objects 实例 - Records(表中的一行数据)
    • Attributes 属性 - Records 中的值
  • 内置很多功能,数据验证,清洗,预处理等等操作。

下面看下示例代码

//使用 sql 操作
let sql =
    "INSERT INTO Users (username, password) VALUES ('john-doe', 'oomygooturulob')";
conn.query(sql, function (error, result) {
  if (error) {
    console.log(error);
  } else {
    console.log(result);
  }
});
// 使用 ORM 进行操作
//Defining User model
const User = sequelize.define("User", {
	username: Sequelize.STRING,
	password: Sequelize.STRING,
});
//Inserting user
User.create({
	username: "john-doe",
	password: "okbro",
}).then(function (user) {
	console.log(user);
}

上面代码中,其中 orm 使用了 sequelize 这个库,可以看到使用 orm 后代码对我们来说更容易理解

添加 Mongoose

安装 mongoose

npm i mongoose

连接 MongoDb

import mongoose from 'mongoose'
import config from './config.local'

export const connect = async function () {
  try {
    console.log('start connect...')
    await mongoose.connect(config.uri, {
      user: config.user,
      pass: config.pass,
      dbName: config.dbName,
    })
    mongoose.set('debug', true)
    console.log('connect success')
  } catch (e) {
    console.log(e)
  }
}

创建 Schema 和 Model

import mongoose, { Schema } from 'mongoose'

// 创建 Schema
const UserSchema = new Schema({
  username: String,
  password: {
    type: String,
    select: false
  },
  hobbies: [String],
  date: Date,
  createAt: Date,
  age: Number
})

// 创建 Model
const User = mongoose.model('user', UserSchema)
export default User

插入一条数据

const user = await User.create({
  username: 'admin',
  password: '123456',
  hobbies: ['play'],
  date: new Date(),
  createAt: new Date(),
  age: 20,
})
await user.save()

也可以这样写

const user = new User({
  username: 'root',
  password: '123456',
  hobbies: ['play'],
  date: new Date(),
  createAt: new Date(),
  age: 20,
})
await user.save()

将现有的集合映射到 Model 上

mongoose 创建集合时,会把我们的 Model 名称全部改成小写,并在最后加上个 s 就是我们的集合名称。例如我们使用

const User = mongoose.model('User', UserSchema)

这时所对应的集合名称就时 users

当我们想让集合的名称是 user 时,可以

const UserSchema = new Schema({
  username: String,
  password: {
    type: String,
    select: false
  },
  hobbies: [String],
  date: Date,
  createAt: Date,
  age: Number
}, {
// 这里的 collation 指的就是集合名称
  collation: 'user'
})

查询

const user = await User.find()
// 这里也可以使用 User.findOne().limit(10).skip(2)
// 按 _id 查询 User.find({_id: 'xxx' })
console.log(user)

这里的使用与原生的 MongoDB 非常类似

图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Python工程师
手记
粉丝
2
获赞与收藏
1

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消