当前位置: 首页 > news >正文

node教程(四)Mongodb+mongoose

文章目录

  • 一、mongodb
    • 1.简介
      • 1.1Mongodb是什么?
      • 1.2数据库是什么?
      • 1.3数据库的作用
      • 1.4数据库管理数据的特点
    • 2.核心概念
    • 3.下载安装与启动
    • 4.命令行交互
      • 4.1数据库命令
      • 4.3文档命令
  • 二、Mongoose
    • 1.介绍
    • 2.作用
    • 3.使用流程
    • 4.插入文档
    • 5.mongoose字段类型

一、mongodb

1.简介

1.1Mongodb是什么?

Mongodb是一个基于分布式文件存储的数据库

1.2数据库是什么?

数据库是按照数据结构来组织、存储和管理数据的应用程序。

1.3数据库的作用

主要作用就是管理数据,对数据进行增删改查

1.4数据库管理数据的特点

相比于纯文件,数据库管理数据具有如下特点:
1.速度更快
2.拓展性更强
3.安全性更强
2.核心概念

2.核心概念

Mongodb中有三个重要概念

  • 数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中可以存放很多集合
  • 集合:集合类似于JS中的数组,在集合中可以存放很多文档
  • 文档:文档是数据库中的最小单位,类似于JS中的对象

在这里插入图片描述

3.下载安装与启动

https://www.mongodb.com/try/download/community
千万不要选中服务端窗口的内容,选中会停止服务,可以敲回车取消选中

4.命令行交互

4.1数据库命令

1.显示所有的数据库

show dbs

2.切换到指定的数据库,如果数据库不存在则会自动创建数据库

use 数据库名

3.显示当前所在数据库

db

4.删除当前数据库

use 库名
db.dropDatabase()

4.2集合命令
1.创建集合

db.createCollection('集合名称')

2.显示当前数据库中的所有集合

show collections

3.删除某个集合

db.集合名.drop()

4.重命名集合

db.集合名.renameCollection('new name')

4.3文档命令

1.插入文档

db.集合名.insert('文档对象')

2.查询文档

db.集合名.find(查询条件)

_id是mongodb自动生成的唯一编号,用来唯一标识文档
3.更新文档

db.集合名.update(查询条件,新的文档)
db.集合名.update({name:'张三'}{$set:{age:19}})

4.删除文档

db.集合名.remove(查询条件)

二、Mongoose

1.介绍

是一个对象文档模型库

2.作用

方便使用代码操作mongodb数据库

3.使用流程

// 安装mongoose
// 导入mongoose
const mongoose = require('mongoose');// 连接mongodb服务                      数据库的名称
mongoose.connect('mongodb://127.0.0.1:27017/abc')/* 设置回调 */
mongoose.connection.on('open',() => {console.log('连接成功');
}); // 设置连接成功的回调
mongoose.connection.on('error',() => {console.log('连接失败');
}); //连接失败的回调
mongoose.connection.on('close',() => {console.log('连接关闭');
}); //设置连接关闭的回调// 关闭mongodb的连接
setTimeout(() => {mongoose.disconnect();
},2000)

4.插入文档

出现以下问题

 throw new MongooseError('Model.create() no longer accepts a callback');

是由于mongoose版本太高,可以手动降级

npm i mongoose@6.8.0
// 安装mongoose
// 导入mongoose
const mongoose = require('mongoose');// 连接mongodb服务                      数据库的名称
mongoose.connect('mongodb://127.0.0.1:27017/abc')/* 设置回调 */
mongoose.connection.once('open',() => {// console.log('连接成功');// 5.创建文档的结构对象// 设置集合中文档的属性以及属性值的类型let BookSchema = new mongoose.Schema({name:String,author: String,price: Number});// 创建模型对象  对文档操作的封装对象let BookModel = mongoose.model('books',BookSchema);// 新增BookModel.create({name:'xiyouji',author:'吴承恩',price:19.9},(err,data) => {if(err){console.log(err);return;}// 如果没有出错,则输出插入后的文档对象console.log(data);// 关闭数据库连接(项目运行过程中不会添加此代码)mongoose.disconnect();});}); // 设置连接成功的回调mongoose.connection.on('error',() => {console.log('连接失败');
}); //连接失败的回调
mongoose.connection.on('close',() => {console.log('连接关闭');
}); //设置连接关闭的回调

5.mongoose字段类型

文档结构可选的常用字段类型列表
在这里插入图片描述

// 安装mongoose
// 导入mongoose
const { Mixed } = require('mongoose');
const mongoose = require('mongoose');// 连接mongodb服务                      数据库的名称
mongoose.connect('mongodb://127.0.0.1:27017/abc')/* 设置回调 */
mongoose.connection.once('open',() => {// console.log('连接成功');// 5.创建文档的结构对象// 设置集合中文档的属性以及属性值的类型let BookSchema = new mongoose.Schema({name:String,author: String,price: Number,is_hot:Boolean,tags:Array,pub_time:Date,test:mongoose.Schema.Types.Mixed });// 创建模型对象  对文档操作的封装对象let BookModel = mongoose.model('books',BookSchema);// 新增BookModel.create({name:'xiyouji',author:'吴承恩',price:19.9,is_hot:true,tags:['鬼怪','励志'],pub_time:new Date(),test:'abc'},(err,data) => {if(err){console.log(err);return;}// 如果没有出错,则输出插入后的文档对象console.log(data);// 关闭数据库连接(项目运行过程中不会添加此代码)mongoose.disconnect();});}); // 设置连接成功的回调mongoose.connection.on('error',() => {console.log('连接失败');
}); //连接失败的回调
mongoose.connection.on('close',() => {console.log('连接关闭');
}); //设置连接关闭的回调

相关文章:

node教程(四)Mongodb+mongoose

文章目录 一、mongodb1.简介1.1Mongodb是什么?1.2数据库是什么?1.3数据库的作用1.4数据库管理数据的特点 2.核心概念3.下载安装与启动4.命令行交互4.1数据库命令4.3文档命令 二、Mongoose1.介绍2.作用3.使用流程4.插入文档5.mongoose字段类型 一、mongod…...

作为一个初学者,该如何入门大模型?

在生成式 AI 盛行的当下,你是否被这种技术所折服,例如输入一段简简单单的文字,转眼之间,一幅精美的图片,又或者是文笔流畅的文字就展现在你的面前。 相信很多人有这种想法,认为生成式 AI 深不可测&#xf…...

编译支持GPU的opencv,并供python的import cv2调用

下载opencv和opencv_contrib,cmake过程中要下载的一些包可以手动下载配置,如果网络较好,也可以等待自动下载。主要记录的是cmake命令: cmake -D CMAKE_BUILD_TYPERELEASE \-D BUILD_opencv_python3YES \-D CMAKE_INSTALL_PREFIX/…...

Bug记录

那些年写过的很小的bug: Bug1: if args.model IRNN or irnn:# some code这实际上不会按你期望的方式工作。原因在于 ‘irnn’ 是一个非空的字符串,因此它在布尔上下文中被视为 True。所以条件总是为真,而不会考虑 args.model 的…...

web3 React dapp中编写balance组件从redux取出并展示用户资产

好啊 上文WEB3 在 React搭建的Dapp中通过redux全局获取并存储用户ETH与自定义token与交易所存储数量中 我们拿到了用户的一个本身 和 交易所token数量 并放进了redux中做了一个全局管理 然后 我们继续 先 起来ganache的一个模拟环境 ganache -d然后 我们启动自己的项目 顺手发…...

BIOS开发笔记 - DDR中的时序参数

通过前一篇文章学习,我们可以大致知道内存条(Module)的组成及SDRAM内部的结构,这一篇再介绍下SDRAM中常见的时序参数以及整个读写操作的流程。 一、外部信号 图1 DDR4的外部线路图 DDR是一种高带宽的传输接口,其外部信号较多,图1是一个DDR4的外部线路图,以下对图中跟通…...

语义分割 - 简介

语义分割是计算机视觉领域的一项重要任务,旨在将图像中的每个像素标记为对应的语义类别。与传统的图像分类任务不同,语义分割不仅要识别整个图像的类别,还需要对图像中的每个像素进行分类,从而实现对图像的像素级别理解。 语义分…...

ch0_OSI 七层网络协议介绍

目录 概述 1、三网融合的概念 三网:电信网络、有线电视网络、计算机网络 概念:把上述三种网络融合成一种网络 2、计算机网络的定义、分类 定义:计算机网络是将地理位置不同的独立计算机系统,通过传输介质链接起来&#xff0c…...

超声波俱乐部分享:百度世界大会点燃AI创业者新希望

10月22日,2023年第十三期超声波俱乐部内部分享会在北京望京举行。本期的主题是:百度世界大会点燃AI创业者新希望。 到场的嘉宾有:超声波创始人杨子超,超声波联合创始人、和牛商业创始人刘思雨,中国国际经济交流中心研…...

【项目管理】项目计划中常见影响进度的风险汇总

哈喽,大家好,我是雷工。 在项目实施过程中针对项目进度的计划常常会有各种各样的的风险,相比出了问题去救火与填坑,能够提前预知风险,并提前调整计划,更能有利于项目的如期交付。 以下为项目计划中影响进度…...

Apache HttpClient库编写的Scala程序

Apache HttpClient库编写的Scala下载器程序,用于下载图片。代码如下: import org.apache.http.HttpHost import org.apache.http.client.HttpClients import org.apache.http.client.methods.HttpHead import org.apache.http.impl.client.CloseableHtt…...

Java 为什么不推荐在 while 循环中使用 sleep() 我悟了

文章目录 前言原因是否正确方案是否合理定时轮询场景事件机制等待和唤醒 个人简介 前言 最近逛 CSDN 看到一篇文章,文章大意是说为什么在循环中不推荐使用 sleep 操作,原因在于线程挂起和唤醒会有很大的性能消耗,并推荐使用 Timer 及 Schedu…...

编程新手的犯错之路

第1名&#xff1a;无尽的if-else陷阱 在我刚刚学习编程的时候&#xff0c;我对if-else语句的使用充满了好奇。我曾经写下了这样一个愚蠢的代码块&#xff0c;用来判断一个数字属于哪个范围&#xff1a; if (number > 1 && number < 10) {// 做一些事情 } else …...

高级 Python:函数

伊利亚拉扎列维奇 一、说明 读完标题后&#xff0c;你可能会问自己一些类似的事情&#xff0c;“Python 中的函数是一个高级概念&#xff1f;如何&#xff1f;所有课程都引入了功能作为语言的基本块。你既是对的&#xff0c;也是错的。 大多数关于 Python 的课程都将函数作为基…...

【学习笔记】[PA2019] Osady i warownie 2

这题好抽象&#x1f631; EI 说这题可以转化为对偶图&#xff0c;但是我完全没看懂&#x1f605; 考虑维护最向右和向下的两条路径&#xff0c;那么不能放的位置就是两条路径的交&#xff08;感性理解一下&#xff09; 考虑抽象的描述这条路径&#xff0c; r i r_i ri​表示…...

Flask——接口路由技术

接口路由技术 一、Flask 简介1、环境安装&#xff1a;2、一个最小的应用3、两种运行方式 二、定义路由1、普通路由2、动态路由3、限定类型4、地址尾部的“/” 三、请求与响应-请求方法四、请求与响应-处理请求数据1、request的常用属性/方法2、get 请求参数3、json 请求4、表单…...

Dubbo篇---第一篇

系列文章目录 文章目录 系列文章目录一、说说一次 Dubbo 服务请求流程?二、说说 Dubbo 工作原理三、Dubbo 支持哪些协议?一、说说一次 Dubbo 服务请求流程? 基本工作流程: 上图中角色说明: 二、说说 Dubbo 工作原理 工作原理分 10 层: 第一层:service 层,接口层,…...

powermock-成员变量赋值

powermock成员变量设置 //被测试类 Service public class Demo {private String aaa ;public String method1(){return aaa;} }//测试类&#xff0c;测试类中使用了mockito、和powermock&#xff0c;用powermock设置成员变量相较于mockito简洁一些&#xff0c;一般mockito和po…...

Axios请求成功和失败时分别执行哪个函数?

在 Axios 中&#xff0c;请求成功和失败时分别执行的函数是 then 和 catch。 特点&#xff1a; then 函数用于处理请求成功的情况&#xff0c;它接受一个回调函数作为参数&#xff0c;在请求成功时会调用该回调函数。catch 函数用于处理请求失败的情况&#xff0c;它也接受一…...

【Linux】进程概念III --fork函数解析

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法…感兴趣就关注我吧&#xff01;你定不会失望。 本篇导航 0. 创建进程1. 认识fork函数2.使用Fork函数3.关于fork的为什么3.1 一个函数如何返回两次?fork究竟在干什么?3.2 为什么要给子…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...