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

news2025/1/20 3:48:52

前言

注意

  • 个人认为中文文档仅适合学习参考,英文文档才真正适合项目中使用
  • 因为中文文档可能没有同步官网最新文档。
  • 比如中文文档版本是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 } = mg
     
    console.log(mongoose === mg)//true
    console.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 db

const { Schema } = mg
const conn = mg.connection

console.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,//数据类型为Number
        min: 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.coloradmin.cn/o/527721.html

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

相关文章

mysql入门:ddl,dml,dql,dcl语句基本操作介绍

mysql入门 数据库相关概念介绍什么是数据库sql语句简介sql语句分类: ddl语句:ddl:数据库 库的创建查找:ddl:数据库查询数据库创建ddl:数据库删除 ddl:数据库 表 的操作ddl表操作:查询ddl 表操作——创建mysql数据类型d…

数据库管理工具【dbForge Tools for Oracle】更新!赶快来看~

Devart 提供包括Oracle、SQL Server、MySQL、PostgreSQL、InterBase以及Firebird在内的专业数据库远程管理软件,dbForge Studio for MySQL是一个在Windows平台被广泛使用的MySQL客户端,它能够使MySQL开发人员和管理人员在一个方便的环境中与他人一起完成…

SpringBoot——整合MyBatis

前情回顾: 在开始介绍SpringBoot整合MyBatis之前,我们先来复习一下在Spring中整合MyBaits是如何来做的。其中的核心思想是将MyBatis中的SqlSession对象交给Spring去管理,并且Spring提供了一个Maper接口扫描器对象去完成为Mapper接口创建动态…

Java 中常见的加密算法,DES、3DES、AES、RSA

加密算法是一种将数据转换为不可读形式的算法,以保护数据的机密性和完整性。加密算法被广泛应用于计算机网络、数据库、电子商务等领域,用于保护敏感数据的安全性,如用户密码、信用卡信息、医疗记录等。在 Java 中,有许多常见的加…

【GigaGAN论文总结】Scaling up GANs for Text-to-Image Synthesis

【GigaGAN论文总结】Scaling up GANs for Text-to-Image Synthesis 1、论点2、贡献3、方法概览Sample-adaptive kernel selectionInterleaving attention with convolutionGenerator designDiscriminator designMulti-scale input, multi-scale output adversarial lossMatchin…

高性能ADC/DAC FMC子卡推出-FMC164

FMC164 子卡集成 4 通道 1Gsps 采样率,16 位 高性能ADC采样,板载4 通道1.25Gsps 16 位DA。板载时钟芯片 HMC7044,可以提供 JESD204B所需要的各种时钟。具有同步/触发功能,模拟信号采用 SSMC 射频连接器输入和输出。板载时钟芯片为…

ant-design实现树的穿梭框,穿梭后右侧是已选树(二)

根据上一篇目标一,进一步实现树的穿梭框 主要内容: 基于ant-design树的穿梭框,实现穿梭后右侧是已选树,(当前antd右侧只有一个层级) 理想的树的穿梭框: 左边是完整的树,右边是已选的树&#x…

Java面试知识点(全)- DB mysql面试知识点

[Java面试知识点(全) 导航: https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 SQL优化 r m y s q l q u e r y ( " S E L E C T u s e r n a m e F R O M u s e r W H E R E s i g n u p d a t e > ′ r mysql_query(…

美国原油CFD价格波动受到哪些因素影响?

经过多年的发展,石油技术已经从煤炭转向原油作为主要能源,这种商品用于各种产品,包括汽油、塑料、药品等。因此,它的价值很高,美国原油CFD价格变动时全世界都在关注。对于交易者来说,美国原油CFD价格波动性…

从零开始Vue3+Element Plus的后台管理系统(五)——尝试多种图标ICON方案iconify

iconfont是过去使用较多的图标方案,后来更倾向于使用SVG,因为SVG更灵活兼容性更好。在最近的几个Vue2项目中,因为强调功能弱化设计所以直接用Element UI自带的图标即可满足需求。 Element Plus的图标库相对Element UI更加丰富,然…

flac格式如何转mp3?这几种方法快收藏起来吧

将FLAC格式转换为MP3格式,可以使用一些转换工具,如优速音频处理器等,也可以使用其他专业音频转换软件。FLAC是一种无损音频编码格式,通常用于保留原始音频质量,但相应的文件大小较大。而MP3是一种有损压缩音频编码格式…

MFC类继承实现CEdit自绘文字颜色,边框,背景色

效果 新建一个继承于CEdit的类CMyEdit 在他的窗体OnNcPaint函数中实现绘制边框,它所响应的消息是WM_NCPAINT void CMyEdit::OnNcPaint() {// TODO: 在此处添加消息处理程序代码// 不为绘图消息调用 CEdit::OnNcPaint()////执行默认的窗体处理过程Default();

linux环境安装使用FastDFS,FastDHT详解

01-简介 GitHub:happyfish100 (YuQing) GitHub FastDFS高性能的分布式文件系统,主要功能包含文件的存储、同步、访问(上传和下载),特别适用于以文件为主体的网络站点(图片分享和视频分享)。 Fa…

2023年Java面试正确姿势(1000+面试题附答案解析)

前言 2023 跳槽不迷茫,大家可以先收藏再看,后续跳槽都能用上的! 一键获取最新java文档。 Java程序员绝大部分工作的时间都是增删改查,很多人觉得这项工作没什么技术含量,任何一件事情都要站在不同的角度去考虑&#xf…

shell的数组

数组定义方法 方法一:数组名( value0 value1 value2 ...) 方法二:数组名([0]value [1]value [2]value...) 方法三:列表名"value0 value1 value2 ..." 数组名($列表名&…

【WLAN从入门到精通-基础篇】

WLAN定义和基本架构 本文参考https://forum.huawei.com/enterprise/zh/thread/580888898454831104 1. WLAN定义 WLAN的全称是Wireless Local Area Network,中文含义是无线局域网,WLAN的定义有广义和狭义两种:广义上讲WLAN是以各种无线电波…

使用Kotlin函数式编程技术构建强大的 Android 应用程序

使用Kotlin函数式编程技术构建强大的 Android 应用程序 Kotlin 是一种现代的多用途编程语言,在 Android 应用程序开发人员中迅速流行起来。Kotlin 有别于其他编程语言的关键特性之一是它对函数式编程的强大支持。Kotlin 函数式编程允许开发人员编写更清晰、更简洁、…

本地生活服务:老将、新秀同台竞技

配图来自Canva可画 本地生活服务领域又热闹起来了。 事实上,本地生活服务一直为各路玩家所看好。最近几年,互联网大厂频频布局本地生活服务领域,其中抖音、快手等短视频平台更是持续加大在本地生活服务领域的布局力度。 前不久&#xff0c…

Grafana系列-统一展示-10-Explore Jaeger

系列文章 Grafana 系列文章 Explore Jaeger 你可以通过Explore查询和显示 Jaeger 的 trace。有 3 种方法: Query by searchQuery by trace IDUpload a JSON trace file Query by search 要使用该方法: 从 Query 类型选择器中选择 Search。填写搜索表格:(和 J…

2023第十三届中国数字营销与电商创新峰会 嘉宾揭晓

2023第十三届中国数字营销与电商创新峰会将于7月6日-7日在上海召开。 本次峰会将通过七大热点主题帮助品牌主突破模式能力,回归初心、精耕细作,实现可持续增长;提升产品能力,实现可持续长期增长;优化营销能力&#xf…