【mongoose】vue3+vite使用mongoose | mongoose7.0使用

news/2023/12/4 21:30:39

前言

注意

  • 个人认为中文文档仅适合学习参考,英文文档才真正适合项目中使用
  • 因为中文文档可能没有同步官网最新文档。
  • 比如中文文档版本是5.x,但官网最新版文档是7.x,api已不支持回调,改为Promise,若使用了中文文档demo,会抛出各种错误。

操作符参考

操作符参考-https://www.mongodb.com/docs/manual/reference/operator/query/gte/

  • 备用地址 - https://www.mongodb.com/docs/manual/reference/operator/query/gte/

版本号

  • mongodb v6.0.5
  • mongoose v7.1.1

mongoose中文文档 - http://mongoosejs.net/docs/guide.html
mongoose英文文档 - https://mongoosejs.com/docs/subdocs.html


vite配置

  • 配置 "type": "module"

    • 支持
      • 支持使用es6导入- import mongoose from "mongoose"
      • 支持顶层await参考
    • 若不配置则不支持es6导入,只能使用 const mongoose= require( "mongoose")
    • 若不配置不支持顶层await参考
  • 参考配置 - 重点第五行

pacgage.json

{"name": "myui","version": "0.0.0","private": true,"type": "module","scripts": {"dev": "vite --host  0.0.0.0","build": "vite build","preview": "vite preview"},"dependencies": {"mongoose": "^7.1.0","vue": "^3.2.45","vue-router": "^4.1.6",},"devDependencies": {"vite": "^4.0.1"}
}

mongoose链接数据库

src/service/dbcontent.js

import mongoose from "mongoose"
const db = mongoose.connect('mongodb://127.0.0.1:27017/test')db.then(mg=> { // 其实参数mg就是mongoose对象const { Schema } = mgconsole.log(mongoose === mg)//trueconsole.log(mongoose.Schema === Schema)//true}, err => console.log(err))
  • 密码、更多链接方式参考 - https://mongoosejs.com/docs/connections.html

  • 大多数情况数据库链接功能应作为一个模块导出

导出:

src/service/dbcontent.js

import mongoose from "mongoose"
const db = mongoose.connect('mongodb://127.0.0.1:27017/test')export default db

使用:
重点: 导入import db from "./dbcontent.js" 必须加后缀.js与相对路径./

  • 使用以下方式导入会报错
    • import db from "./dbcontent" 没有.js后缀
    • import db from "dbcontent.js" 没有相对路径./
    • import db from "/dbcontent.js" 没有相对路径./
    • import db from "@/dbcontent.js" 只能是相对路径./

顶层await参考

  • 顶层await参考-http://t.csdn.cn/eVeFT
  • 备用地址 - http://t.csdn.cn/eVeFT

src/service/app.js

import db from "./dbcontent.js"  const mg = await dbconst { Schema } = mg
const conn = mg.connectionconsole.log('数据库已连接')

model与Schema

  • model(colName,data) - 创建的模型
    • colName 集合名称,若数据库没有指定的集合名称会自动创建
      • type: String
    • data 添加的数据
      • type: [Object,Array]

  • Schema(config) - 创建模型的规则
    • config - 规则配置
      • type: Object

创建一个model前必须有Schema规则
- Schema是规定model的数据类型
- 若创建的model与规定的Schema规则不符会报错


demo.js

// 连接数据库
import mongoose from "mongoose"
const db = mongoose.connect('mongodb://127.0.0.1:27017/test')// mg ->  mongoose
const mg = await db //等待数据库连接 
const { Schema } = mg //获取Schema 
const conn = mg.connection //获取connection连接方法// 1. 创建Schema(制定规则)
const userSchema = new Schema({name: String}
)// 2. 创建model,并在集合users中使用userSchema规则
const UserModel = mg.model('users', userSchema)// 3. 使用UserModel创建实例
const user = new UserModel({name: '我是老6呀'}
)// 4. 保存创建的实例,保存失败会报错,成功将返回结果
const userSaveStatu = await user.save()// 查看创建结果
console.log(userSaveStatu)// 5. 关闭数据库连接
conn.close()
  • node环境运行

在这里插入图片描述

  • 可直接嵌套Schema
// 在集合users增加数据
const UserModel = mg.model('users', new Schema({age: {type: Number,//数据类型为Numbermin: 6,//最小值max: 251//最大值},name: {type: String,trim: true,//是否清空字符串首尾空格minlength: 2,//字符串最小长度maxlength: 20//字符串最大长度},sex: {type: Number,enum: [0, 1],//枚举default: 1//默认值}
}))// 保存
const createUser = await new UserModel({age: Math.round(Math.random() * (251 - 6)) + 6,name: '小米呀',sex: Math.round(Math.random())
}).save()console.log(createUser)// 关闭连接
conn.close()

node环境运行结果
在这里插入图片描述

删(deleteMany || deleteOne)

const UserModel = mg.model('users', new Schema({userName: String,pas: String,// 嵌套的文档posts: [new Schema({data: String})]}
))// 删除一个
const delUser = await UserModel.deleteOne({ userName: '小林同学' })
// 删除多个 删除age大于等于18的数据
const delMore = await UserModel.deleteMany({ age: { $gte: 18 } })console.log(delUser)
console.log(delMore)// 关闭连接
conn.close()
  • 打印结果
    • acknowledged
      • true 删除成功
      • false 删除失败
    • deletedCount 删除数量
{ acknowledged: true, deletedCount: 1 }
{ acknowledged: true, deletedCount: 2 }

常用命令

  1. conn.dropDatabase(dbName) - 删除数据库
    • dbName 数据库名称
      • type : String
    • 返回值
      • Promise
// 删除test数据库
const delDb = await conn.dropDatabase('test')
console.log(delDb);

  1. conn.dropCollection(colName) - 删除数据库
    • colName 集合名称
      • type : String
    • 返回值
      • Promise
// 删除store集合
const delCol = await conn.dropCollection('store')
console.log(delCol);

connection数据库连接事件

  1. connecting 数据库初始链接时
  2. connected 数据库连接成功时,或失去链接重连时。就像我去开车,刚插上车钥匙时
  3. open 已连接数据库,且可操作数据库 。就像我去开车,车已经启动完成,踩下油门就可以跑时
  4. disconnected 与数据库失去链接时,可能是代码显式关闭连接、数据库服务器崩溃或网络连接问题造成。就像我车开着开着就突然熄火了
  5. close 成功关闭数据库时。就像我把车熄火,并拔了车钥匙时
  6. reconnected 与数据库失去连接,并成功重新连接时。就像我车开着开着熄火了,我又重新启动车辆时。
  7. error 连接出错
  8. all 连接到副本集并且Mongoose已成功连接到连接字符串中指定的所有服务器时时

demo.js

import mongoose from "mongoose"const readUrl = 'mongodb://jxzr:123456@127.0.0.1:27017/juxianz' 
const db = mongoose.connect(readUrl )conn.on('close',res=>console.log('关闭'))setTimeout(() => {conn.close()}, 1000)

http://www.ppmy.cn/news/70462.html

相关文章

【Redis】布隆过滤器原理与应用

文章目录 原理应用实战总结 布隆过滤器(Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。 它的优点是空间效率和查询时间都比一般的算法要好的多&#xff…

Docker容器启动时运行shell脚本

文章目录 需求docker开机运行docker容器开机运行docker容器启动时运行脚本执行多个脚本docker容器进入时启动脚本docker容器启动后退出参考文献 需求 来源于部署在liux上的Docker服务如何自动运行,而不是手动运行,因为输入数据是变化的,这里…

22. Unity - 3D游戏开发小计01 --- 修复动画BUG、更改环境光照、导航网格、相机跟随、场景渲染后期处理

1. 导入玩家角色模型 素材来自于unity官网:3D Beginner:Tutorial Resources 在3D游戏开发中,三维物体模型一般会有团队内的其它成员提供,包括模型本身和动画文件等。我们需要做的是将这些素材进行组合并使用代码进行控制。 若对模型添加动画文件后,当运行时可能会发现模型…

C++:深入理解C++11新特性:Chapter3:左值和右值

Chapter3:左值和右值 1. 将右值绑定到 左值2. 将右值绑定到 常量左值引用3. 将右值绑定到右值引用总结:5. 左值,右值和右值引用6. 引用类型可以引用的的值类型7. 全能类型,常量左值引用用途7.1 拷贝构造函数7.2解决浅拷贝&#xf…

chatGPT生成的:前端学习导航

MDN Web 文档:提供关于 HTML、CSS、JavaScript 等前端技术的详细文档和指南。W3Schools:提供在线教程,覆盖了 HTML、CSS、JavaScript 和其他前端技术的基础知识。freeCodeCamp:一个开源的学习平台,提供免费的编程课程和…

红黑树(RBTree)

红黑树的基本性质 (1)红黑树是每个结点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉搜索树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求: 性质1. 结点是红色或黑色。 性质2. 根结点是黑色。 性质…

包管理工具:pnpm | 京东云技术团队

作者:京东零售 杨秀竹 pnpm 是什么 pnpm( performant npm )指的是高性能的 npm,与 npm 和 yarn 一样是一款包管理工具,其根据自身独特的包管理方法解决了 npm、yarn 内部潜在的安全及性能问题,在多数情况…

SQL 常用函数总结(二)

字符串处理函数 1. CONCAT() 函数功能:将两个或多个字符串合并成一个字符串。 函数语法: CONCAT(string1, string2, ...)string1、string2 等的数量可以是零个或多个,分别表示需要合并的字符串。 使用示例: 假设现在有一个名…

软件测试工程师的职业发展方向

一、软件测试工程师大致有4个发展方向: 1 资深软件测试工程师 一般情况,软件测试工程师可分为测试工程师、高级测试工程师和资深测试工程师三个等级。 达到这个水平比较困难,这需要了解很多知识,例如C语言,JAVA语言&#xff0c…

多尺度样本熵

多尺度样本熵及其MATLAB实现方法 随着人们对信号处理技术的不断深入研究和发展,在信号非线性、非高斯的情况下,熵的概念成为一种很重要的测量信号复杂度的度量方式。多尺度熵是指在多个尺度范围内测量信号复杂度的一种方法。本文将介绍多尺度样本熵的概…

什么是前端宏任务,什么又是前端微任务呢?一文读懂前端微任务宏任务。

在前端中,宏任务和微任务是异步任务的两种不同类型。 前端有很多中异步任务类型。 可以分为三类: 宏任务 定时器任务用户交互事件任务(鼠标事件、键盘事件)网络请求任务I/O操作任务(读写文件) 微任务 Pro…

TPC 网络通信基础(二)

文件下载利用 tcp原理 Ubuntu 20.04 python3.7 三个python文件 客户端.py 服务器.py 文件.py 客户端充当用户 服务器充当提供下载的服务端 客户端代码: import socketdef main():# 创建套接字tcp_socket socket.socket(socket.AF_INET,socket.SOCKET_…

String StringBuilder常用方法总结

在java中String类不可变的,创建一个String对象后不能更改它的值。所以如果需要对原字符串进行一些改动操作,就需要用StringBuilder类或者StringBuffer类,StringBuilder比StringBuffer更快一些,缺点是StringBuilder不是线程安全的&…

JAVA面试-语法基础- A01

语法基础 面向对象封装继承多态 面向对象 面向对象特性 封装 利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分隔的独立实体,数据被保护在抽象数据类型的内部,尽可能的隐藏内部的细节,只保留一些对外的接口…

前端通信-服务端发送事件: SSE(Server-Sent Events)

在日常开发中,我们经常会遇到需要实时获取数据的情况,之前实现这种相似的功能通常都是用ajax长轮询,在HTML5规范中定义了新的通信方式,WebSocket和SSE。websocket相对SSE更常用一些,本文着重来介绍SSE的应用。 SSE AP…

滨州申请专利需要准备哪些材料?

如果你想保护你的一些发明和设计,你可以申请专利。申请专利时,需要提前了解程序和相关流程。那么,申请专利需要准备哪些材料呢?让我们一起仔细看看。 首先,申请专利需要准备哪些材料? (1)外观专利&#xff…

C++学习 Day14

目录 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3. 类模板 3.1 类模板的定义格式 3.2 类模板的实例化 1. 泛型编程 如何实现一个通用的交换函数呢? void Swap(int&a…

德尔玛IPO首日破发,市值蒸发超4亿

今日(5月18日),小米“代工厂”广东德尔玛科技股份有限公司(下称“德尔玛”,301332.SZ)正式在深交所挂牌上市。 德尔玛此次IPO募资净额为12.31亿元,开盘价为14.81元/股,与发行价持平…

【Linux内核解析-linux-5.14.10】文件系统知识点以及解答(建议收藏)

什么是Linux文件系统? 答:Linux文件系统是一种用于管理和组织计算机上数据的方法。它提供了一个层次结构,使用户能够轻松地访问他们的数据,并且支持对数据进行备份、恢复和保护。 Linux中有哪些常见的文件系统类型? 答…

使用 SpringBoot 访问 MySQL 数据库

一、目标 创建一个 MySQL 数据库,构建一个 Spring 应用程序,并将其连接到新创建的数据库。 二、准备工作 1、最喜欢的文本编辑器或 IDE 2、Java 17或更高版本 3、Gradle 7.5或Maven 3.5 三、初始化项目 1、 导航到https://start.spring.io。该服务…
最新文章