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. Java实现 洛谷 Car的旅行路线

    输入输出样例 输入样例#1: 1 3 10 1 3 1 1 1 3 3 1 30 2 5 7 4 5 2 1 8 6 8 8 11 6 3 输出样例#1: 47.5 import java.util. ...

  2. java实现第三届蓝桥杯方块填数

    方块填数 "数独"是当下炙手可热的智力游戏.一般认为它的起源是"拉丁方块",是大数学家欧拉于1783年发明的. 如图[1.jpg]所示:6x6的小格被分为6个部 ...

  3. c/c++混编

    /* head.h */#ifndef __SUM_H__ #define __SUM_H__ #ifdef __cplusplus extern "C" { #endif int ...

  4. vim编辑器添加插件NERDTree

    0x01 首先在 http://www.vim.org/scripts/script.php?script_id=1658 下载插件 (可能要爬梯,也可以在https://github.com/scr ...

  5. LNMP zabbix 4.4

    硬件配置需求 环境 平台 CPU/内存 数据库 硬盘 监控主机数 小型 CentOS 2CPU/1GB MySQL.InnoDB 普通 100 中型 CentOS 2CPU/2GB MySQL.Inn ...

  6. Flask 的模板渲染

    Flask 的模板渲染 渲染模板语言和django很像,都是用{{}},{%%} 注意点: 1 flask给模板传值,render_template("index.htm",use ...

  7. 性能调优必备利器之 JMH

    if 快还是 switch 快?HashMap 的初始化 size 要不要指定,指定之后性能可以提高多少?各种序列化方法哪个耗时更短? 无论出自何种原因需要进行性能评估,量化指标总是必要的. 在大部分 ...

  8. AWS—Xshell工具远程登录EC2虚拟机

    一.创建AWS账户(已有AWS账号的请跳过) 访问 https://amazonaws-china.com/cn/,点击创建AWS账户,根据提示填写个人相关信息,创建AWS账户. 二.创建EC2虚拟机 ...

  9. TensorFlow从0到1之TensorFlow超参数及其调整(24)

    正如你目前所看到的,神经网络的性能非常依赖超参数.因此,了解这些参数如何影响网络变得至关重要. 常见的超参数是学习率.正则化器.正则化系数.隐藏层的维数.初始权重值,甚至选择什么样的优化器优化权重和偏 ...

  10. TensorFlow从0到1之TensorFlow实现单层感知机(20)

    简单感知机是一个单层神经网络.它使用阈值激活函数,正如 Marvin Minsky 在论文中所证明的,它只能解决线性可分的问题.虽然这限制了单层感知机只能应用于线性可分问题,但它具有学习能力已经很好了 ...