node.js mongoose简述

news2024/11/24 5:38:10

目录

官方文档

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.coloradmin.cn/o/1316898.html

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

相关文章

怎么使用会声会影?2024年最新使用会声会影的具体步骤

一听说视频剪辑我们就不由得联想到电影、电视等一些高端的视频剪辑技术,大家都觉得视频剪辑是一个非常复杂而且需要很昂贵的设备才可以完成的技术活,这对很多“门外汉”来说都可望而不可及。实际上,使用会声会影剪辑视频不仅是很多人都可以操…

哈希扩展:位图与布隆过滤器

目录 1. 位图1.1 位图引入1.2 位图概念1.3 位图的模拟实现1.4 位图相关问题1.5 位图的应用 2. 布隆过滤器2.1 布隆过滤器概念2.2 模拟实现2.3 布隆过滤器相关问题2.3.1 哈希切分 1. 位图 1.1 位图引入 给40亿个不重复的无符号整数,没排过序。给一个无符号整数&…

Java 基础学习(十二)文本I/O、日期与时间API

1 文本 I/O 1.1 字符流 1.1.1 什么是字符流 在Java中,字符流是指提供了基于字符的I/O能力的API。 Java 1.0中提供的基于字节的I/O流API只能支持8位字节流,无法妥善地处理16位Unicode字符。由于需要支持Unicode处理国际化字符,因此Java 1.…

网络安全——Iptables防DDoS攻击实验

一、实验目的要求: 二、实验设备与环境: 三、实验原理: 四、实验步骤: 五、实验现象、结果记录及整理: 六、分析讨论与思考题解答: 一、实验目的要求: 1、掌握常见DDoS攻击SYN Flood的攻击…

Toyota Programming Contest 2023#8(AtCoder Beginner Contest 333)

A - Three Threes 题目大意:给你一个整数n,将这个数n输出n次。 呃呃 B - Pentagon 题目大意:给你一个正五边形ABCDE,给你任意两条边,判断是否相等 主要问题要判断一下内边:AD,AC,…

小 cookie,大作用:探索网站中的隐私追踪器(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

用Flask搭建简单的web模型部署服务

目录结构如下: 分类模型web部署 classification.py import os import cv2 import numpy as np import onnxruntime from flask import Flask, render_template, request, jsonifyapp Flask(__name__)onnx_session onnxruntime.InferenceSession("mobilen…

【图的应用一:最小生成树】- 用 C 语言实现普里姆算法

目录 一、最小生成树 二、普里姆算法的构造过程 三、普里姆算法的实现 一、最小生成树 假设要在 n 个城市之间建立通信联络网,则连通 n 个城市只需要 n - 1 条线路。这时,自然会考虑这样一个问题,如何在最节省经费的前提下建立这个通信…

云仓酒庄的品牌雷盛红酒分享红酒里加二氧化硫有害吗?

雷盛葡萄酒是广州万豪酒业有限公司旗下主力葡萄酒品牌,该品牌由云仓酒庄负责全国运营。雷盛(LEESON)品牌系列葡萄酒有幸邀请著名导演张纪中先生担任品牌代言人。采用多国家采购、多葡萄酒品种、多价位区间的全系列整体品牌形式,让…

谷达冠楠科技:抖音网店到底怎么做靠谱

随着互联网的发展,越来越多的人开始尝试在网上开设自己的店铺。而在众多的电商平台中,抖音网店无疑是近年来最受年轻人欢迎的一种方式。那么,抖音网店到底怎么做才能靠谱呢? 首先,我们需要明确一点,无论是在哪个平台上…

JS对象笔记

对象声明 对象也只是一种数据类型/字面值。写对象这个字面值有两种写法,一种是普通的对象,这种对象用new 构造函数(),另一种是JS内特有的json对象。这个对象是直接{}就代表对象。且也是在堆内。 对象的构成 无论是上…

Pytorch当中的.detach()操作是什么意思

.detach() 是 PyTorch 中用于从计算图中分离张量的方法。当我们在PyTorch中进行张量运算时,操作会构建一个计算图来跟踪计算历史,这个计算图用于自动求导和反向传播来计算梯度。 使用.detach()方法可以将一个张量从当前的计算图中分离出来,使…

System作为系统进程陔如何关闭?

一、简介 system进程是不可以关闭的,它是用来运行一些系统命令的,比如reboot、shutdown等,以及用来运行一些后台程序,比如ntfs-3g、v4l2loopback等。system进程也被用于运行一些内核模块,比如nvidia、atd等。system进程…

太阳能电池特性测试用太阳光模拟器24H光源

概述 太阳能模拟器是一种在室内模拟太阳光的设备,能够较为准确地模拟太阳辐射的准直性、均匀性和光谱特性。它的基本原理是利用人工光源模拟太阳光辐射,以克服太阳光辐射受环境、时间和气候等因素影响,并且总辐照度不能调节等缺点&#xff0c…

c++ websocket 协议分析与实现

前言 网上有很多第三方库,nopoll,uwebsockets,libwebsockets,都喜欢回调或太复杂,个人只需要在后端用,所以手动写个; 1:环境 ubuntu18 g(支持c11即可) 第三方库:jsoncpp,openssl 2:安装 jsoncpp 读取json 配置文件 用 自动安装 网…

【Redis】远程访问配置教程与远程客户端连接测试

前言 Redis 是一种基于内存的高性能键值存储数据库,常用于缓存、会话管理和实时数据分析等场景。在默认情况下,Redis 不允许远程连接,为了进行远程连接,需要进行一些配置和操作。接下来将介绍如何修改配置文件以允许远程连接&…

毅速:3D打印随形水路 提高良品率和生产效率的新利器

随着科技的不断发展,3D打印技术已经成为模具制造领域的一种重要技术。其中,模具随形水路的设计和制造是提高注塑产品良品率和生产效率的关键环节。 模具随形水路是一种根据产品形状设计的水路,可以更靠近产品,并在模具内热点集中区…

SpringBoot 源码解析2:启动流程1

SpringBoot 源码解析2:启动流程1 1.启动方式2.SpringBootApplication3.SpringApplication3.1 构造器SpringApplication3.2 SpringApplication#run 3.3 SpringApplication#run 中关键方法3.1 SpringApplication#prepareEnvironment3.2 SpringApplication#prepareCont…

前端登录界面网站设计模板--HTML+CSS

🎀登录表单 💖效果展示 💖HTML代码展示 <!DOCTYPE html> <html lang="en" > <head></

【机器学习】044_Kaggle房价预测(机器学习模型实战)

参考自《动手学深度学习》中“Kaggle比赛实战&#xff1a;预测房价”一节 一、数据准备 首先从网站上下载要获取的房价数据。 DATA_HUB是一个字典&#xff0c;用来将数据集名称的字符串和数据集相关的二元组一一对应。 二元组包含两个值&#xff1a;数据集的URL和用来验证文…