当前位置: 首页 > article >正文

Mongoose 详解

为 Node.js 与 MongoDB 之间提供了一个更高级、更便捷的交互方式。

一、安装

# 使用 npm 安装

npm install mongoose

二、基本使用

1. 连接数据库

const mongoose = require("mongoose");

// 数据库连接 URI

const uri = "mongodb://localhost:27017/myDatabase";

// 连接到 MongoDB

mongoose.connect(uri, {

  useNewUrlParser: true,

  useUnifiedTopology: true,

});

// 获取数据库连接对象

const db = mongoose.connection;

// 监听连接成功事件

db.on("connected", () => {

  console.log("Connected to MongoDB");

});

// 监听连接错误事件

db.on("error", (err) => {

  console.error("MongoDB connection error:", err);

});

2. 定义数据模型

数据模型是基于 Schema 定义的。Schema 定义了文档的结构和数据类型,而模型则是基于 Schema 创建的构造函数,用于操作数据库中的文档。

// 定义 Schema

const userSchema = new mongoose.Schema({

  name: String,

  age: Number,

  email: {

    type: String,

    unique: true,

  },

});

// 创建模型

const User = mongoose.model("User", userSchema);

三、文档操作

1. 创建文档

使用模型的构造函数创建一个新的文档实例,然后调用 `save()` 方法将其保存到数据库中。

const newUser = new User({

  name: "John",

  age: 30,

  email: "john@example.com",

});

newUser

  .save()

  .then((savedUser) => {

    console.log("Saved user:", savedUser);

  })

  .catch((err) => {

    console.error("Error saving user:", err);

  });

2. 查询文档

使用模型的静态方法(如 `find()`、`findOne()` 等)来查询文档。

// 查询所有用户

User.find()

  .then((users) => {

    console.log("All users:", users);

  })

  .catch((err) => {

    console.error("Error finding users:", err);

  });

// 根据条件查询单个用户

User.findOne({ name: "John" })

  .then((user) => {

    console.log("User:", user);

  })

  .catch((err) => {

    console.error("Error finding user:", err);

  });

3. 更新文档

使用模型的静态方法(如 `updateOne()`、`updateMany()` 等)或文档实例的 `update()` 方法来更新文档。

// 更新单个文档

User.updateOne({ name: "John" }, { age: 31 })

  .then((result) => {

    console.log("Update result:", result);

  })

  .catch((err) => {

    console.error("Error updating user:", err);

  });

4. 删除文档

使用模型的静态方法(如 `deleteOne()`、`deleteMany()` 等)来删除文档。

// 删除单个文档

User.deleteOne({ name: "John" })

  .then((result) => {

    console.log("Delete result:", result);

  })

  .catch((err) => {

    console.error("Error deleting user:", err);

  });

5. 数据验证

`mongoose` 提供了强大的数据验证功能,可以在 Schema 中定义验证规则,确保插入或更新的数据符合要求。如下:`name` 字段是必需的,`age` 字段的取值范围在 18 到 100 之间,`email` 字段有唯一约束,并且使用自定义的验证函数来验证邮箱格式。

const userSchema = new mongoose.Schema({

  name: {

    type: String,

    required: true,

  },

  age: {

    type: Number,

    min: 18,

    max: 100,

  },

  email: {

    type: String,

    unique: true,

    validate: {

      validator: function (value) {

        return /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(value);

      },

      message: "Invalid email address",

    },

  },

});

四、中间件

`mongoose` 支持中间件,允许在文档保存、更新、删除等操作前后执行自定义逻辑。

userSchema.pre("save", function (next) {

  // 在保存文档之前执行的逻辑

  console.log("Before saving user:", this);

  next();

});

userSchema.post("save", function (doc, next) {

  // 在保存文档之后执行的逻辑

  console.log("After saving user:", doc);

  next();

});


http://www.kler.cn/a/553421.html

相关文章:

  • Kubernetes:EKS 中 Istio Ingress Gateway 负载均衡器配置及常见问题解析
  • 网页五子棋——对战前端
  • Swupdate升级不强制依赖version字段
  • 软考高级《系统架构设计师》知识点(七)
  • 全局动态组件uniapp(vue)
  • Qt常用控件之复选按钮QCheckBox
  • Spring Bean的生命周期执行流程
  • 解决 Mac 只显示文件大小,不显示目录大小
  • Python--数据类型(中)
  • 【数据挖掘】数据仓库
  • 《深度学习》——自然语言处理(NLP)
  • DeepSeek-R1:使用KTransformers部署(保姆级教程)
  • 月之暗面-KIMI-发布最新架构MoBA
  • 实现历史数据的插入、更新和版本管理-拉链算法
  • 我的2025年计划
  • 红外图像与可见光图像在目标检测时的区别
  • 【数据分析】通过个体和遗址层面的遗传相关性网络分析
  • 浪潮信息元脑R1服务器重塑大模型推理新标准
  • 【核心算法篇十四】《深度解密DeepSeek量子机器学习:VQE算法加速的黑科技与工程实践》
  • MySQL 多表查询技巧和高阶操作实例1