4.2.Mongoose实现增删查改

中文文档地址: https://cn.mongoosedoc.top/docs/guide.html

4.2.1.Mongoose是什么?

Mongoose是MongoDB的一个对象模型工具,封装了MongoDB对文档的的一些增删改查等常用方法,让NodeJS操作Mongodb数据库变得更加灵活简单,换句话说就是Mongoose是一个工具,这个工具可以让nodejs操作MongoDB更加方便

在学习之前我们需要注意Mongoose的一个特点,那就是通过关系型数据库的思想来设计非关系型数据库

4.2.2.准备工作

1.安装mongoose

npm install mongoose --save

2.连接数据库

// 引入mongoose
const mongoose = require('mongoose')
// 连接数据库
mongoose.connect('mongodb://testadmin:nodeing123@127.0.0.1:27017/test', {useNewUrlParser: true})

3.定义Schema

什么是Schema呢?Schema是mongoose里用到的一种数据模式,可以理解为表结构的定义,举个例子:当我们使用关系型数据库MySQL的时候,我们需要先确定数据库字段,每个字段的类型、是否为空、默认值等等,Schema的定义就是起类似的作用,比如,我需要给user这个文档定义Schema

var UserSchema = mongoose.Schema({
name: String,
age: Number
})

上面就规定了user文档中存的name值必须为字符串类型,age必须为数字类型

下面是支持的类型:

String      字符串
Number 数字
Date 日期
Buffer 二进制
Boolean 布尔值
Mixed 混合类型
ObjectId 对象ID
Array 数组

完整步骤代码:

// 1.引入mongoose
const mongoose = require('mongoose')
// 2.连接数据库
mongoose.connect('mongodb://testadmin:nodeing123@127.0.0.1:27017/test', {useNewUrlParser: true}) // 3.定义Schema,例如:现在需要操作users集合(表),我们就需要给这个集合定义一个对应的Schema let UserSchema = mongoose.Schema({
name: String,
age: Number,
status: Number
})

4.2.3.增删查改操作

前面我们定义的Schema只是约定了一种数据模式,并不具备操作数据库的能力,如果想要操作数据库,还需要定义模型:

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

通过上面的代码,我们创建出了一个User模型,这个User 模型才具有操作User集合(表)的能力

定义模型注意事项:1、model里面第一个参数的命名要首字母大写 2、这个模型的名字要和数据库中集合(表)的名字对应,默认的对应规则为:如果模型名字最后一位是字母,那么对应数据库中的名字会加s,例如:模型名字为User,那么对应的数据库中的集合名字为users,如果模型名字最后一个是数字,那么和数据库中的集合名字不用加s,例如:模型名字为User1,对应的数据库中的集合名字为user1 3、可以指定模型名称关联的集合,需要写成下面这样

// 指定User模型 对应数据库中user集合
let User = mongoose.model('User', UserSchema, 'user')

1.增加数据

// 1.引入mongoose
const mongoose = require('mongoose')
// 2.连接数据库
mongoose.connect('mongodb://testadmin:nodeing123@127.0.0.1:27017/test', {useNewUrlParser: true}) // 3.定义Schema,例如:现在需要操作user集合(表),我们就需要给这个集合定义一个对应的Schema let UserSchema = mongoose.Schema({
name: String,
age: Number,
status: Number
}) // 4.创建模型 let User = mongoose.model('User', UserSchema) // 5.增加数据
let UserObj = new User({
name: '张三',
age: 20,
status: 0
})
UserObj.save()

2.查询数据

// 1.引入mongoose
const mongoose = require('mongoose')
// 2.连接数据库
mongoose.connect('mongodb://testadmin:nodeing123@127.0.0.1:27017/test', {useNewUrlParser: true}) // 3.定义Schema,例如:现在需要操作user集合(表),我们就需要给这个集合定义一个对应的Schema let UserSchema = mongoose.Schema({
name: String,
age: Number,
status: Number
}) // 4.创建模型 let User = mongoose.model('User', UserSchema) // // 5.增加数据
// let UserObj = new User({
// name: '张三',
// age: 20,
// status: 0
// })
// UserObj.save() // 6.查询数据 // User.find({}, (err, result) => {
// if (err) {
// console.log(err)
// return
// }
// console.log(result)
// })

3.更新数据

// 1.引入mongoose
const mongoose = require('mongoose')
// 2.连接数据库
mongoose.connect('mongodb://testadmin:nodeing123@127.0.0.1:27017/test', {useNewUrlParser: true}) // 3.定义Schema,例如:现在需要操作user集合(表),我们就需要给这个集合定义一个对应的Schema let UserSchema = mongoose.Schema({
name: String,
age: Number,
status: Number
}) // 4.创建模型 let User = mongoose.model('User', UserSchema) // // 5.增加数据
// let UserObj = new User({
// name: '张三',
// age: 20,
// status: 0
// })
// UserObj.save() // 6.查询数据 // User.find({}, (err, result) => {
// if (err) {
// console.log(err)
// return
// }
// console.log(result)
// }) // 7.修改数据 User.updateOne({name: "张三"}, {age: 42}, (err, result) => {
if (err) {
console.log(err)
return
}
console.log("更新成功")
})

4.删除数据

// 1.引入mongoose
const mongoose = require('mongoose')
// 2.连接数据库
mongoose.connect('mongodb://testadmin:nodeing123@127.0.0.1:27017/test', {useNewUrlParser: true}) // 3.定义Schema,例如:现在需要操作user集合(表),我们就需要给这个集合定义一个对应的Schema let UserSchema = mongoose.Schema({
name: String,
age: Number,
status: Number
}) // 4.创建模型 let User = mongoose.model('User', UserSchema) // // 5.增加数据
// let UserObj = new User({
// name: '张三',
// age: 20,
// status: 0
// })
// UserObj.save() // 6.查询数据 // User.find({}, (err, result) => {
// if (err) {
// console.log(err)
// return
// }
// console.log(result)
// }) // 7.修改数据 // User.updateOne({name: "张三"}, {age: 42}, (err, result) => {
// if (err) {
// console.log(err)
// return
// }
// console.log("更新成功")
// }) // 8.删除数据
User.deleteOne({name: '张三'}, (err, result) => {
if (err) {
console.log(err)
return
}
console.log(result)
})

5.定义Schema的时候可以给默认值

let UserSchema = mongoose.Schema({
name: String,
age: Number,
status: Number,
gender: {
type: String,
default: '男'
}
})

螺钉课堂视频课程地址:http://edu.nodeing.com

MongoDB快速入门教程 (4.2)的更多相关文章

  1. MongoDb 快速入门教程

    文章首发于[博客园-陈树义],点击跳转到原文MongoDb 快速入门教程. MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的 ...

  2. MongoDB快速入门教程 (3.2)

    3.2.索引 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,建立索引,通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条 ...

  3. MongoDB快速入门教程 (4.4)

    4.5.Mongoose索引和方法 4.5.1.设置索引 let UserSchema = mongoose.Schema({ sn: { type: Number, // 设置唯一索引 unique ...

  4. MongoDB快速入门教程 (4.3)

    4.3.Mongoose模块化 4.3.1.为什么要进行模块化拆分? 模块化拆分的目的是为了代码的复用,让整个项目的结构更加清晰,举个例子:当数据库中的集合变多的时候,例如有课程.订单.分类.教师等多 ...

  5. MongoDB快速入门教程 (4.1)

    4.Mongoose使用 4.1.nodejs操作mongodb 文档地址:http://mongodb.github.io/node-mongodb-native/3.2/tutorials/cru ...

  6. MongoDB快速入门教程 (3.3)

    3.4.聚合 3.4.1.什么是聚合? MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*) 例如上图 ...

  7. MongoDB快速入门教程(3.1)

    3.MongoDB进阶 3.1.权限验证 以下内容适用于Mac系统用户,window系统用户请看后面文档 3.1.1.创建超级管理员用户 默认情况下连接mongodb是不需要用户名和密码的,这样不安全 ...

  8. MongoDB快速入门教程 (2)

    2.MongoDB的基本的CRUD操作 2.1.创建文档 在具体操作之前,想要知道有多少数据库,可以执行下面命令 show dbs 在mongodb中,数据库中包含的叫做集合(表),集合中存储的内容叫 ...

  9. MongoDB快速入门教程 (1)

    1.MongoDB初识 1.1.MongoDB是什么? MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于 ...

随机推荐

  1. 【HIVE & Spark】将hive引擎换成Spark,运行速度快!怎么换?请看本文

    本教程仅仅是使用spark,能在hive用就行. 1.下载Spark; 2.WinSCP上传spark压缩包到虚拟机: 3.tar -zxvf spark-2.3.3-bin-without-hado ...

  2. 面试题: SpringBoot 的自启动原理

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 引言 不论在工作中,亦或是求职面试,Spring Boot 已经成为我们必知必会的技能项.除了比较老旧的 ...

  3. WEB前端程序员需要的网站整理

    前端学习资源实在是又多又广,在这样的一个知识的海洋里,我们像一块海绵一样吸收,想要快速提高效率,平时的总结不可缺少,以下总结了一些,排版自我感觉良好,推送出来. 一.插件类网站 jQuery插件库:h ...

  4. 分享两个常用的rem布局方式

    关于rem 这种技术需要一个参考点,一般都是以<body>的“font-size”为基准. 比如我们设置body,html的字体大小为10px:那么1rem就是10px, 这样一来,我们设 ...

  5. Java实现 蓝桥杯 算法训练 找零钱

    试题 算法训练 找零钱 问题描述 有n个人正在饭堂排队买海北鸡饭.每份海北鸡饭要25元.奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25.50.100元),而且饭堂阿姨一开始没有任何零钱.请问饭 ...

  6. Java实现蓝桥杯日期问题

    历届试题 日期问题 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 小明正在整理一批历史文献.这些历史文献中出现了很多日期.小明知道这些日期都在1960年1月1日至2059年12月3 ...

  7. Java实现 LeetCode 647 回文子串(暴力)

    647. 回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "a ...

  8. Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)

    542. 01 矩阵 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 ...

  9. Java实现 LeetCode 404 左叶子之和

    404. 左叶子之和 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 /** * Definiti ...

  10. Java实现 LeetCode 318 最大单词长度乘积

    318. 最大单词长度乘积 给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母.你可以认为每个单词只包含小 ...