小白必看!Node.js+Mongoose操作MongoDB,快速上手数据库开发!

如果想通过专栏的形式查看本次项目实践可以点击查阅Next图册目实践

我的B站视频号查看本次项目实践视频或更多免费教程,梦兽编程不定时直播写代码。

通过上次的MongoDB的基本操作,但是MongoDB是一个进程,在Next.js的Node进程中我们要如何操作MongoDB呢?

梦兽编程这里推荐使用Mongoose,只要你学会了使用MongoDB那么Mongoose也自然会,因为Mongoose很多的api和操作都是直接参考MongoDB的bson来设计的。其实这样归功于javascript本身对json格式操作就很舒服。

Mongoose 是什么?

Mongoose是一个强大的、基于Node.js的MongoDB对象模型工具,它可以让我们更方便地在Node.js环境中操作MongoDB。在这篇文章中,我们将详细介绍如何使用Mongoose进行数据库的连接、数据的查询、插入、更新和删除等操作。

1. 安装Mongoose

首先,我们需要在我们的项目中安装Mongoose。在你的项目目录中,运行以下命令:

复制代码
npm install mongoose

2. 连接到MongoDB

php 复制代码
const mongoose = require('mongoose');
# 这是一个标准的mongoose连接字符串,你给出以下格式mongoose就会给你启动MongoDB Client客户端,不同语言不同library连接字符串可能不一样

# /test 为我们需要用到的数据库
mongoose.connect('mongodb://localhost/test', {useNewUrlParser: true, useUnifiedTopology: true});

3. 定义模型

在Mongoose中,模型(Model)是由Schema构造函数生成的构造函数。每个模型都是一个独立的数据库实体,有自己的文档和方法。模型的主要职责是在数据库中创建和读取文档。

模型的作用主要体现在以下几个方面:

  1. 数据结构定义:模型通过Schema定义了文档的结构,包括字段名、字段类型、默认值、验证器等。这为数据提供了一致性和可预测性。
  2. 数据验证:模型可以定义验证规则,如必填字段、唯一性约束、自定义验证函数等。在保存文档到数据库之前,Mongoose会自动执行这些验证。
  3. 查询构建:模型提供了丰富的查询API,如find、findOne、findById等,可以方便地从数据库中读取和搜索文档。
  4. 实例方法和静态方法:模型可以定义实例方法和静态方法。实例方法为每个文档实例添加新的方法,静态方法为模型本身添加新的方法。
  5. 中间件:模型可以定义中间件(也称为pre和post钩子),在某些操作(如保存文档、删除文档)之前或之后执行特定的逻辑。
  6. 数据映射:模型将数据库中的数据映射到JavaScript对象,使得我们可以使用JavaScript的语法和方法来操作数据库。

用oop编程来来讲就是我们的数据库表和具体表中的一条数据对象的抽象类。

模型支持那些类型请到这里查阅schematypes

php 复制代码
const Schema = mongoose.Schema;

const blogSchema = new Schema({
  title:  String,
  author: String,
  body:   String,
  comments: [{ body: String, date: Date }],
  date: { type: Date, default: Date.now },
  hidden: Boolean,
  meta: {
    votes: Number,
    favs:  Number
  }
});

const Blog = mongoose.model('Blog', blogSchema);

4. 插入数据

使用模型的save方法,我们可以将数据保存到数据库中:

ini 复制代码
const myBlog = new Blog({ title: 'Mongoose Guide', author: 'John Doe' });

myBlog.save()
  .then(doc => {
    console.log(doc.title + " saved to bookstore collection.");
  })
  .catch(err => {
    console.error(err);
  });

5. 查询数据

Mongoose提供了多种查询数据的方法,如find,findOne,findById等:

ini 复制代码
// find all blogs
Blog.find()
  .then(blogs => {
    console.log(blogs);
  })
  .catch(err => {
    console.error(err);
  });
/*
// find 完全可以使用和MonogoDB一样的方式进行查询减少学习成本
Blog.find({ title: { $gte: 21, $lte: 65 } });
*/

// find blog by id
Blog.findById(myBlog._id)
  .then(blog => {
    console.log(blog);
  })
  .catch(err => {
    console.error(err);
  });

6. 更新数据

使用updateOne,updateMany或findByIdAndUpdate方法,我们可以更新数据库中的数据:

ini 复制代码
Blog.updateOne({ title: 'Mongoose Guide' }, { title: 'Mongoose Guide Updated' })
  .then(res => {
    console.log(res);
  })
  .catch(err => {
    console.error(err);
  });

7.0 删除数据

使用deleteOne,deleteMany或findByIdAndDelete方法,我们可以删除数据库中的数据:

typescript 复制代码
Blog.deleteOne({ title: 'Mongoose Guide Updated' })
  .then(() => {
    console.log('Blog deleted');
  })
  .catch(err => {
    console.error(err);
  });

结语

以上就是使用Mongoose操作MongoDB的基本方法基本一致。在实际使用中,你可能需要根据具体的需求来调整这些操作。希望这篇文章能帮助你更好地理解和使用Mongoose。如果你有任何问题或者需要进一步的帮助,欢迎随时向我提问。

截屏2023-08-17 23.44.00.png

感谢你的阅读,期待在下一篇文章中再次见到你!

这里是梦兽编程,本次的代码更新将会放在Github本次项目的Github连接中的V3.0分支中

我的B站视频号更多视频动态。

截屏2023-08-18 00.02.24.png

本文使用 markdown.com.cn 排版

相关推荐
接着奏乐接着舞。40 分钟前
部署BFF与前端的踩坑与经验记录
前端·node.js
清风91593862914 小时前
告别Token账单无底洞:OpenClaw本地部署,重塑企业数据主权的唯一解
node.js·ollama·openclaw ai智能体·openclaw本地部署·openclaw硬件配置·ultralab
0xDevNull15 小时前
Windows系统使用nvm实现多版本切换Node.js详细教程
windows·node.js
胡哈17 小时前
MCP (Model Context Protocol) 原理与实战
node.js·mcp
知识分享小能手18 小时前
MongoDB入门学习教程,从入门到精通,在生产环境中设置MongoDB(21)
数据库·学习·mongodb
cdcdhj19 小时前
在window下将Mongodb单机改为副本集,只用于测试环境,实际上并没有增加真的副本集
数据库·mongodb
蛊明19 小时前
Win11 如何下载安装 Node.js
node.js
一江寒逸1 天前
零基础从入门到精通MongoDB(下篇):进阶精通篇——吃透高级查询、事务、索引优化与集群架构,成为MongoDB实战高手
数据库·mongodb·架构
窝子面1 天前
NestJs+MongoDB+Deepseek+Langchain实现ai聊天助手
javascript·数据库·人工智能·mongodb
丸辣,我代码炸了1 天前
用 PostgreSQL 一库模拟 MySQL / MongoDB / Redis / Elasticsearch(附 ts_rank 详解)
mysql·mongodb·postgresql