mongoose6.0版以上操作mongodb数据库的基本使用

news2025/2/25 18:02:08

1、介绍

Mongoose 是一个对象文档模型库,官网 http://www.mongoosejs.net/

2、作用

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

3、使用流程

3.1、链接数据库

//1. 安装 mongoose--->  npm install mongoose --save

//2. 导入 mongoose
const mongoose = require("mongoose");
//3. 连接数据库   mongodb://127.0.0.1:27017+数据库名字
mongoose.connect("mongodb://127.0.0.1:27017/col");
//4. 设置连接回调
//连接成功
mongoose.connection.on("open", () => {
  console.log("连接成功");
});

//连接出错
mongoose.connection.on("error", () => {
  console.log("连接出错~~");
});

//连接关闭
mongoose.connection.on("close", () => {
  console.log("连接关闭");
});

3.2、在数据表里面添加数据

字段类型:

//2. 导入 mongoose
const mongoose = require("mongoose");
//3. 连接数据库
mongoose.connect("mongodb://127.0.0.1:27017/col");

//4. 设置连接回调
//连接成功
mongoose.connection.on("open", () => {
  console.log("连接成功");
  // 声明数据量文档的字段类型。类似ts的定义
  const bookSchema = new mongoose.Schema({
    id: Number,
    name: String,
    num: Number,
  });
  // 声明往那个集合(表)添加数据,没有该集合会自动创建,这里集合名字books,并定义集合的文档类型
  const bookModel = mongoose.model("book", bookSchema);
  // 往该集合添加数据
  bookModel
    .insertMany([
      {
        id: 6,
        name: "多多",
        num: 2,
      },
      {
        id: 7,
        name: "公告",
        num: 5,
      },
      {
        id: 8,
        name: "更换",
        num: 4,
      },
      {
        id: 9,
        name: "观后感",
        num: 8,
      },
    ])
    .then((data) => {
      console.log("插入文本success", data);
      // mongoose.connection.close();
    })
    .catch((err) => {
      if (err) throw err;
    });
});

//连接出错
mongoose.connection.on("error", () => {
  console.log("连接出错~~");
});

//连接关闭
mongoose.connection.on("close", () => {
  console.log("连接关闭");
});
// setTimeout(() => {
//   // 断开与 MongoDB 的连接并关闭数据库
//   mongoose.connection.close();
//   mongoose.disconnect();
// }, 2000);

3.3、删除数据

//2. 导入 mongoose
const mongoose = require("mongoose");
//3. 连接数据库
mongoose.connect("mongodb://127.0.0.1:27017/col");
//4. 设置连接回调
//连接成功
mongoose.connection.on("open", () => {
  console.log("连接成功");
  const bookSchema = new mongoose.Schema({
    id: Number,
    name: String,
    num: Number,
  });
  const bookModel = mongoose.model("book", bookSchema);
  // 删除books集合中,文档id为3的一条数据
  bookModel
    .deleteOne({ id: 3 })
    .then((data) => {
      console.log("删除成功", data);
    })
    .catch((err) => {
      console.log("删除失败");
    });
  // 删除books集合中,满足条件num为55的所有文档
  // bookModel
  //   .deleteMany({ num: 55 })
  //   .then((data) => {
  //     console.log("删除成功", data);
  //   })
  //   .catch((err) => {
  //     console.log("删除失败");
  //   });
});

//连接出错
mongoose.connection.on("error", () => {
  console.log("连接出错~~");
});

//连接关闭
mongoose.connection.on("close", () => {
  console.log("连接关闭");
});

3.4、修改数据

//2. 导入 mongoose
const mongoose = require("mongoose");
//3. 连接数据库
mongoose.connect("mongodb://127.0.0.1:27017/col");
//4. 设置连接回调
//连接成功
mongoose.connection.on("open", () => {
  console.log("连接成功");
  const bookSchema = new mongoose.Schema({
    id: Number,
    name: String,
    num: Number,
  });
  const bookModel = mongoose.model("book", bookSchema);
  // 更新一条数据
  bookModel
    .updateOne({ id: 2 }, { name: "22" })
    .then((data) => {
      console.log("更新成功", data);
      mongoose.connection.close();
    })
    .catch((err) => {
      console.log("更新失败");
      mongoose.connection.close();
    });
  // 更新多条数据,符合条件的数据全部更新
  // bookModel
  //   .updateMany({ id: 2 }, { name: "22" })
  //   .then((data) => {
  //     console.log("更新成功", data);
  //     mongoose.connection.close();
  //   })
  //   .catch((err) => {
  //     console.log("更新失败");
  //     mongoose.connection.close();
  //   });
});

//连接出错
mongoose.connection.on("error", () => {
  console.log("连接出错~~");
});

//连接关闭
mongoose.connection.on("close", () => {
  console.log("连接关闭");
});

3.5、查找数据

//2. 导入 mongoose
const mongoose = require("mongoose");
//3. 连接数据库
mongoose.connect("mongodb://127.0.0.1:27017/col");
//4. 设置连接回调
//连接成功
mongoose.connection.on("open", () => {
  console.log("连接成功");
  const bookSchema = new mongoose.Schema({
    id: Number,
    name: String,
    num: Number,
  });
  const bookModel = mongoose.model("book", bookSchema);
  // 读取单条
  bookModel
    .findOne({ id: 2 })
    .then((data) => {
      console.log("读取成功", data);
    })
    .catch((err) => {
      console.log("读取失败");
    });

  //根据 ID 获取文档
  // bookModel
  //   .findById("63f34af50cf203761ede1896")
  //   .then((data) => {
  //     console.log("读取成功", data);
  //   })
  //   .catch((err) => {
  //     console.log("读取失败");
  //   });

  //读取所有
  // bookModel
  //   .find()
  //   .then((data) => {
  //     console.log("读取成功", data);
  //   })
  //   .catch((err) => {
  //     console.log("读取失败");
  //   });
});

//连接出错
mongoose.connection.on("error", () => {
  console.log("连接出错~~");
});

//连接关闭
mongoose.connection.on("close", () => {
  console.log("连接关闭");
});

3.6、 条件查询

//价格小于 20 的图书
  BookModel.find({ price: { $lt: 20 } })
    .then((data) => {
      console.log("查询成功", data);
      mongoose.connection.close();
    })
    .catch((err) => {
      console.log("查询失败");
      mongoose.connection.close();
    });

  //曹雪芹 或者 余华的书
  // BookModel.find({ $or: [{ author: "曹雪芹" }, { author: "余华" }] })
  //   .then((data) => {
  //     console.log("查询成功", data);
  //     mongoose.connection.close();
  //   })
  //   .catch((err) => {
  //     console.log("查询失败");
  //     mongoose.connection.close();
  //   });

  //价格大于 30 且小于 70
  // BookModel.find({ $and: [{ price: { $gt: 30 } }, { price: { $lt: 70 } }] });
  // .then((data) => {
  //   console.log("查询成功", data);
  //   mongoose.connection.close();
  // })
  // .catch((err) => {
  //   console.log("查询失败");
  //   mongoose.connection.close();
  // });

  //正则表达式, 搜索书籍名称中带有 `三` 的图书
  // BookModel.find({ name: /三/ });
  // .then((data) => {
  //   console.log("查询成功", data);
  //   mongoose.connection.close();
  // })
  // .catch((err) => {
  //   console.log("查询失败");
  //   mongoose.connection.close();
  // });

3.7、个性化读取

(1)字段筛选

//0:不要的字段
//1:要的字段
SongModel.find().select({_id:0,title:1}).exec(function(err,data){
if(err) throw err;
console.log(data);
mongoose.connection.close();
});

(2)数据排序

//sort 排序
//1:升序
//-1:倒序
SongModel.find().sort({hot:1}).exec(function(err,data){
if(err) throw err;
console.log(data);
mongoose.connection.close();
});

(3)数据截取

//skip 跳过 limit 限定
SongModel.find().skip(10).limit(10).exec(function(err,data){
if(err) throw err;
console.log(data);
mongoose.connection.close();
});

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

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

相关文章

PiflowX-DorisWrite组件

DorisWrite组件 组件说明 往Doris存储写入数据。 计算引擎 flink 组件分组 doris 端口 Inport:默认端口 outport:默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子fenodesFenodes“”无是Doris FE http地址, 支持多个…

PLC-IoT 网关开发札记(4):Xamarin Forms 实现自定义控件(一个开关)

1. 需求 物联网项目中要集成大量的设备,作为一种简单的数字孪生手段,每一型号的设备都需要一个对应的虚拟实现,也就是用界面把这个设备呈现出来。设备有多个可管理的“属性”,对这个设备的监测对应获取这个设备“属性”的值&…

Linux系统编程(十一):高级 IO

参考引用 UNIX 环境高级编程 (第3版)嵌入式Linux C应用编程-正点原子 Linux系统编程(文章链接汇总) 1. 非阻塞 I/O 阻塞就是进入了休眠状态,交出了 CPU 控制权阻塞 I/O 就是对文件的 I/O 操作(读写操作)是阻塞式的&a…

FGSM方法生成交通信号牌的对抗图像样本

背景: 生成对抗样本,即扰动图像,让原本是“停车”的信号牌识别为“禁止驶入” 实验准备 模型:找一个训练好的,识别交通信号牌的CNN模型,灰度图像 模型地址:GitHub - Daulettulegenov/TSR_CNN:…

高级RAG(六): 句子-窗口检索

之前我们介绍了LlamaIndex的从小到大的检索 的检索方法,今天我们再来介绍llamaindex的另外一种高级检索方法: 句子-窗口检索(Sentence Window Retrieval),在开始介绍之前让我们先回顾一下基本的RAG检索的流程,如下图所示: 在执行基…

学会编写自定义configure脚本,轻松实现定制化配置

学会编写自定义configure脚本,轻松实现定制化配置 一、configure脚本的作用和重要性二、configure脚本的基本结构和语法三、编写自定义configure脚本的步骤四、示例五、常见的问题总结 一、configure脚本的作用和重要性 configure脚本是用于自动配置软件源代码的脚…

jmeter如何做接口测试?

Jmeter介绍&测试准备: Jmeter介绍:Jmeter是软件行业里面比较常用的接口、性能测试工具,下面介绍下如何用Jmeter做接口测试以及如何用它连接MySQL数据库。 前期准备:测试前,需要安装好Jmeter以及jdk并配置好jdk环…

高级JavaScript。同步和异步,阻塞和非阻塞

同步阻塞 同步非阻塞 异步阻塞 异步非阻塞 在当什么是同步和异步,阻塞与非阻塞的概念还没弄清楚之前,更别提上面这些组合术语了,只会让你更加困惑。 同步和异步 同步和异步其实指的是,请求发起方对消息结果的获取是主动发起…

强化学习应用(五):基于Q-learning算法的无人车配送路径规划(通过Python代码)

一、Q-learning算法介绍 Q-learning是一种强化学习算法,用于解决基于环境的决策问题。它通过学习一个Q-table来指导智能体在不同状态下采取最优动作。下面是Q-learning算法的基本步骤: 1. 定义环境:确定问题的状态和动作空间,并…

NI PXIe-6386国产替代,8路AI(16位,14 MS/s/ch),2路A​O,24路DIO,PXI多功能I/O模块

PXIe-6386 PXIe,8路AI(16位,14 MS/s/ch),2路A​O,24路DIO,PXI多功能I/O模块 PXIe-6386是一款同步采样的多功能DAQ设备。该模块提供了模拟 I/O、数字I/O、四个32位计数器和模拟和数字触发。板载N…

2024年【G1工业锅炉司炉】考试及G1工业锅炉司炉考试资料

题库来源:安全生产模拟考试一点通公众号小程序 G1工业锅炉司炉考试根据新G1工业锅炉司炉考试大纲要求,安全生产模拟考试一点通将G1工业锅炉司炉模拟考试试题进行汇编,组成一套G1工业锅炉司炉全真模拟考试试题,学员可通过G1工业锅…

【现代密码学】笔记3.1-3.3 --规约证明、伪随机性《introduction to modern cryphtography》

【现代密码学】笔记3.1-3.3 --规约证明、伪随机性《introduction to modern cryphtography》 写在最前面私钥加密与伪随机性 第一部分密码学的计算方法论计算安全加密的定义:对称加密算法 伪随机性伪随机生成器(PRG) 规约法规约证明 构造安全…

LeetCode刷题.15(哈希表与计数排序解决41. 缺失的第一个正数)

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 示例 2: 输入:nums …

MCS-51---串行通信的特点

目录 一.同步通信和异步通信 1.异步通信 2.同步通信 二.串行通信的方式 1.单工 2.半双工 3.全双工 三.串行通信的速率 四.MCS-51单片机结构 五.串行口的控制 1.串行口控制寄存器(SCON) 2.电源控制寄存器(PCON) 六.波特率的设计 七.串行口的工作方式 1.方式0 2.…

NLP论文阅读记录 - WOS | ROUGE-SEM:使用ROUGE结合语义更好地评估摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结 前言 ROUGE-SEM: Better evaluation of summarization using ROUGE combin…

操作系统详解(5.1)——信号(Signal)的相关题目

系列文章: 操作系统详解(1)——操作系统的作用 操作系统详解(2)——异常处理(Exception) 操作系统详解(3)——进程、并发和并行 操作系统详解(4)——进程控制(fork, waitpid, sleep, execve) 操作系统详解(5)——信号(Signal) 文章目录 题目第一问第二问第三问 题目…

python24.1.14while循环

当条件结束时间未知时,while循环比for循环更合适 实践

Debian(Linux)局域网共享文件-NFS

NFS (Network File system) 是一种客户端-服务器文件系统协议,允许多个系统或用户访问相同的共享文件夹或文件。最新版本是 NFS-V4,共享文件就像存储在本地一样。它提供了中央管理,可以使用防火墙和 Kerberos 身份验证进行保护。 本文将指导…

docker-compose部署kafka、SASL模式(密码校验模式)

一.基础kafka部署 zookeeper,kafka,kafka-ui docker-compose.yml 注意点:192.168.1.20 是宿主机的ip version: "3" services:zookeeper:image: wurstmeister/zookeepercontainer_name: zookeeperrestart: alwaysports:- 2181:2…

未来的失业将是常态吗?

2024年,科技巨头谷歌、亚马逊都在本周宣布大规模裁员,影响到众多部门。此外,社交平台 Discord 表示将裁员 17%,游戏服务商 Unity Software 宣布将裁员 25%,语言学习应用程序 Duolingo 则称解雇了 10% 的正式职工&#…