小白必看!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 排版

相关推荐
布丁椰奶冻23 分钟前
解决使用nvm管理node版本时提示npm下载失败的问题
前端·npm·node.js
影子落人间1 小时前
已解决npm ERR! request to https://registry.npm.taobao.org/@vant%2farea-data failed
前端·npm·node.js
码爸2 小时前
spark读mongodb
大数据·mongodb·spark
又写了一天BUG4 小时前
npm install安装缓慢及npm更换源
前端·npm·node.js
danplus5 小时前
node发送邮件:如何实现Node.js发信功能?
服务器·node.js·外贸开发信·邮件群发·蜂邮edm邮件营销·邮件接口·营销邮件
青稞儿5 小时前
面试题高频之token无感刷新(vue3+node.js)
vue.js·node.js
一个很帅的帅哥18 小时前
实现浏览器的下拉加载功能(类似知乎)
开发语言·javascript·mysql·mongodb·node.js·vue·express
JY_H20 小时前
MongoDB
数据库·mongodb
Bang邦21 小时前
使用nvm管理Node.js多版本
前端·node.js·node多版本管理
新知图书1 天前
Node.js快速入门
node.js