node.js mongoose简述

目录

官方文档

mongoose

Schema

Model

Query

document

关系


官方文档

Mongoose v8.0.3: Getting Started

mongoose

Mongoose 是一个 Node.js 环境下 MongoDB 的对象建模工具。它提供了一种在应用程序中与 MongoDB 数据库进行交互的方式,使得开发者能够使用JavaScript 对象的形式定义数据模型、进行数据库查询,并进行数据验证等操作。

const mongoose = require('mongoose');

Schema

Schema是Mongoose中用于定义数据结构的一种抽象。它定义了集合中document的字段、类型、验证规则等信息,相当于数据库中表的结构定义。

const blogSchema = new mongoose.Schema({title: {type: String,trim: true,minlength: [10, '标题最少10个字符'],maxlength: [40, '标题最多40个字符'],required: [true, '必须有一个标题'],},content: {type: String,required: true},createdAt: {type: Date,default: Date.now(),select: true},//...},
);

Model

Model与MongoDB数据库交互,它是应用程序与数据库之间的桥梁,通过Model可以实现对数据库中的数据进行增删改查操作。

const Blog = mongoose.model('Blog', blogSchema);

增删改查

  • Blog.find()
  • Blog.findById()
  • Blog.findByIdAndDelete()
  • Blog.findByIdAndUpdate()
  • Blog.findOne()
  • Blog.findOneAndDelete()
  • Blog.deleteMany()
  • Blog.deleteOne()
  • ...

Model具有增删改查行为的方法返回一个Query实例

Query

let query = Blog.find(Parameters)

query可链式调用返回this(query自身)

let query = Blog.find(Parameters)
sortQuery = query.sort(Parameters)
console.log(query == sortQuery)  // true

document

document是Model的实例,通过await query() 或者query.then(doc => {}) 得到doc,具有Schema定义的数据结构

创建

const doc = await Blog.create(req.body);

查询

// async try catch
let query = Blog.findById(req.params.id);
const doc = await query;//或者 
query.then(doc => {})

修改

// 手动修改
doc.title = 'saaaaaaaaaa'
doc.save()  //保存// 或者 async try catch
const doc = await Blog.findByIdAndUpdate(req.params.id, req.body, {new: true,runValidators: true
});

关系

mongoose.Model是mongoose.Document的子类,所有Model(Blog)的基类

console.log(mongoose.Model.prototype.__proto__ == mongoose.Document.prototype)
// true

Model(Blog)是mongoose.Model的子类

console.log(Blog.prototype.__proto__ == mongoose.Model.prototype)
//true

doc是Model的实例

console.log(doc.__proto__ == Blog.prototype) // true
console.log(doc instanceof Blog) // true

由于Model继承自mongoose.Model,mongoose.Model继承自mongoose.Document,所以

console.log(doc instanceof mongoose.Model) // true
console.log(doc instanceof mongoose.Document) // true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/227363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NoSQL 数据库有哪些典型应用?

前面的内容介绍了数据库读写分离和分库分表相关知识,都是针对关系型数据库的,即通常说的 RDBMS。除了关系型数据库,NoSQL 在项目开发中也有着越来越重要的作用,与此同时,NoSQL 相关的内容也是面试的常客。今天我们一起…

函数难题:排列

给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 输入格式 共一行,包含一个整数 n。 输出格式 按字典序输出所有排列方案,每个方案占一行。 数据范围 …

【Linux】驱动

驱动 驱动程序过程 系统调用 用户空间 内核空间 添加驱动和调用驱动 驱动程序是如何调用设备硬件 驱动 在计算机领域,驱动(Driver)是一种软件,它充当硬件设备与操作系统之间的桥梁,允许它们进行通信和协同工作。驱动程…

[已解决】uniapp内置插件,editor富文本报错(附quill.min.js、image-resize.min.js文件)

在使用uni-app运行内置插件editor时,无法输入内容,控制台报错 原因:查看官网得知,需动态引入quill.min.js、image-resize.min.js文件 解决方法: 1.下载quill.min.js、image-resize.min.js到项目static/eidtor文件中 链…

云原生之深入解析Kubernetes Operator的最佳实践和最常见的问题分析

一、Kubernetes Operator 简介 Kubernetes Operator 是通过连接主 API 并 watch 时间的一组进程,一般会 watch 有限的资源类型。当相关 watch 的 event 触发的时候,operator 做出响应并执行具体的动作。这可能仅限于与主 API 交互,但通常会涉…

Linux下FFmepg使用

1.命令行录一段wav,PCM数据 ffmpeg -f alsa -i hw:0,0 xxx.wav//录制 ffplay out.wav//播放ffmpeg -f alsa -i hw:0,0 -ar 16000 -channels 1 -f s16le 1.pcm ffplay -ar 16000 -channels 1 -f s16le 1.pcm -ar freq 设置音频采样率 -ac channels 设置通道 缺省为1 2.将pcm…

Kubernetes实战(十四)-k8s高可用集群扩容master节点

1 单master集群和多master节点集群方案 1.1 单Master集群 k8s 集群是由一组运行 k8s 的节点组成的,节点可以是物理机、虚拟机或者云服务器。k8s 集群中的节点分为两种角色:master 和 node。 master 节点:master 节点负责控制和管理整个集群…

PyTorch官网demo解读——第一个神经网络(1)

神经网络如此神奇,feel the magic 今天分享一下学习PyTorch官网demo的心得,原来实现一个神经网络可以如此简单/简洁/高效,同时也感慨PyTorch如此强大。 这个demo的目的是训练一个识别手写数字的模型! 先上源码: fr…

Composer 安装与使用

Composer 是 PHP 的一个依赖管理工具。我们可以在项目中声明所依赖的外部工具库,Composer 会帮你安装这些依赖的库文件,有了它,我们就可以很轻松的使用一个命令将其他人的优秀代码引用到我们的项目中来。 Composer 默认情况下不是全局安装&a…

vue3 element-plus 日期选择器 el-date-picker 汉化

vue3 项目中,element-plus 的日期选择器 el-date-picker 默认是英文版的,如下: 页面引入: //引入汉化语言包 import locale from "element-plus/lib/locale/lang/zh-cn" import { ElDatePicker, ElButton, ElConfigP…

西南科技大学数据库实验二(表数据插入、修改和删除)

一、实验目的 (1)学会用SQL语句对数据库进行插入、修改和删除数据操作 (2)掌握insert、update、delete命令实现对表数据插入、修改和删除等更新操作。 二、实验任务 创建数据库,并创建Employees表、Departments表和…

微服务网关Gateway

springcloud官方提供的网关组件spring-cloud-starter-gateway,看pom.xml文件,引入了webflux做响应式编程,请求转发用到了netty的reactor模型,支持的请求数在1W~1.5W左右。hystrix停止维护后,官方推荐resilience4j做服务熔断,网关这里也能看到依赖。 对于网关提供的功能…

Unity 使用AddTorque方法给刚体施加力矩详解

给刚体施加力,除了使用AddForce方法,我们还可以使用AddTorque方法。该方法是通过施加力矩给刚体以力。AddTorque方法从形式上跟AddForce差不多,它也有4个重载方法: 1、AddTorque(Vector3 torque);使用Vector3类型参数…

在Node.js中MongoDB查询分页的方法

本文主要介绍在Node.js中MongoDB查询分页的方法。 目录 Node.js中MongoDB查询分页使用原生的mongodb驱动程序查询分页使用Mongoose库进行查询分页注意项 Node.js中MongoDB查询分页 在Node.js中使用MongoDB进行查询分页,可以使用原生的mongodb驱动程序或者Mongoose库…

【web安全】密码爆破讲解,以及burp的爆破功能使用方法

前言 菜某总结,欢迎指正错误进行补充 密码暴力破解原理 暴力破解实际就是疯狂的输入密码进行尝试登录,针对有的人喜欢用一些个人信息当做密码,有的人喜欢用一些很简单的低强度密码,我们就可以针对性的生成一个字典,…

【Linux】文件系统、文件系统结构、虚拟文件系统

一、文件系统概述 1. 什么是文件系统?2. 文件系统(文件管理系统的方法)的种类有哪些?3. 什么是分区?4. 什么是文件系统目录结构?5. 什么虚拟文件系统Virtual File System ?6. 虚拟文件系统有什…

OpenAI开源超级对齐方法:用GPT-2,监督、微调GPT-4

12月15日,OpenAI在官网公布了最新研究论文和开源项目——如何用小模型监督大模型,实现更好的新型对齐方法。 目前,大模型的主流对齐方法是RLHF(人类反馈强化学习)。但随着大模型朝着多模态、AGI发展,神经元…

Spring Boot SOAP Web 服务端和客户端

一. 服务端 1. 技术栈 JDK 1.8,Eclipse,Maven – 开发环境SpringBoot – 基础应用程序框架wsdl4j – 为我们的服务发布 WSDLSOAP-UI – 用于测试我们的服务JAXB maven 插件 – 用于代码生成 2.创建 Spring Boot 项目 添加 Wsdl4j 依赖关系 编辑pom…

cesium 自定义贴图,shadertoy移植教程。

1.前言 cesium中提供了一些高级的api,可以自己写一些shader来制作炫酷的效果。 ShaderToy 是一个可以在线编写、测试和分享图形渲染着色器的网站。它提供了一个图形化的编辑器,可以让用户编写基于 WebGL 的 GLSL 着色器代码,并实时预览渲染结…

006 Windows共享

一、共享要求 一般是局域网内使用 1、物理上处于统一局域网 同一公司的网络同一家庭的网络连接同一手机热点的主机 2、逻辑上处于同一局域网 直接可以ping对方主机(能够直接访问到) 二、共享权限 1、共享权限 一般设置为everyone完全控制 2、NTF…