Mongoose 使用简介

Mongoose 是 Node.js 环境下的 MongoDB 对象数据模型(ODM)库,提供模式验证和类型转换等功能,便于管理 MongoDB 集合和文档。

安装 Mongoose

在 Node.js 项目中安装 Mongoose:

bash 复制代码
npm install mongoose

连接 MongoDB

在 Node.js 应用中使用 Mongoose 连接 MongoDB 数据库:

javascript 复制代码
const mongoose = require('mongoose');

mongoose.connect(
    'mongodb://localhost:27017/myapp', 
    { useNewUrlParser: true, useUnifiedTopology: true }
);

mongodb://localhost:27017/myapp 是数据库的 URI,myapp 是数据库名称。useNewUrlParseruseUnifiedTopology 是确保使用新 MongoDB 驱动的连接选项。

定义模型

使用 Schema 定义数据结

构。模型基于 Schema 构建,代表数据库中的集合,用于查询和操作数据。

javascript 复制代码
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);

使用模型进行 CRUD 操作

创建文档:

javascript 复制代码
const myBlog = new Blog({
  title: 'Mongoose Usage',
  author: 'John Doe',
  body: 'Mongoose is easy to use with MongoDB.'
});

myBlog.save(err => {
  if (err) console.error(err);
});

查询文档:

javascript 复制代码
Blog.find({ author: 'John Doe' }, (err, blogs) => {
  if (err) console.error(err);
});

更新文档:

javascript 复制代码
Blog.updateOne({ title: 'Mongoose Usage' }, { body: 'Updated content' }, err => {
  if (err) console.error(err);
});

删除文档:

javascript 复制代码
Blog.deleteOne({ title: 'Mongoose Usage' }, err => {
  if (err) console.error(err);
});

中间件、自定义验证和虚拟属性

中间件(Hooks)可在动作前后执行代码:

javascript 复制代码
blogSchema.pre('save', function(next) {
  // 执行保存前的操作
  next();
});

自定义验证:

javascript 复制代码
blogSchema.path('title').validate(val => {
  return val.length < 120;
}, 'Title too long');

虚拟属性:

javascript 复制代码
blogSchema.virtual('summary').get(function() {
  return this.title + ' - ' + this.author;
});

Mongoose 通过 Schema 和模型以及其他高级特性简化了 Node.js 应用中与 MongoDB 交互的复杂性。通过这些工具,可以有效管理数据库操作。


English version

Introduction to Mongoose Usage

Mongoose is an Object Data Modeling (ODM) library for MongoDB and Node.js. It offers schema validation and typecasting, making the management of MongoDB collections and documents more convenient.

Install Mongoose

To install Mongoose in a Node.js project:

bash 复制代码
npm install mongoose

Connect to MongoDB

Use Mongoose to connect to a MongoDB database within a Node.js application:

javascript 复制代码
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/myapp', { useNewUrlParser: true, useUnifiedTopology: true });

The mongodb://localhost:27017/myapp is the database URI, with myapp being the database name. The options useNewUrlParser and useUnifiedTopology ensure the use of the new MongoDB driver for connections.

Define a Model

Data structures are defined using Schemas. Models are built based on Schemas, representing collections in the database for querying and manipulating data.

javascript 复制代码
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);

Perform CRUD Operations Using the Model

To create a document:

javascript 复制代码
const myBlog = new Blog({
  title: 'Mongoose Usage',
  author: 'John Doe',
  body: 'Mongoose is easy to use with MongoDB.'
});

myBlog.save(err => {
  if (err) console.error(err);
});

To query documents:

javascript 复制代码
Blog.find({ author: 'John Doe' }, (err, blogs) => {
  if (err) console.error(err);
});

To update a document:

javascript 复制代码
Blog.updateOne({ title: 'Mongoose Usage' }, { body: 'Updated content' }, err => {
  if (err) console.error(err);
});

To delete a document:

javascript 复制代码
Blog.deleteOne({ title: 'Mongoose Usage' }, err => {
  if (err) console.error(err);
});

Middleware, Custom Validation, and Virtual Properties

Middleware (Hooks) allows execution of code before or after certain actions:

javascript 复制代码
blogSchema.pre('save', function(next) {
  // perform actions before saving
  next();
});

Custom validation:

javascript 复制代码
blogSchema.path('title').validate(val => {
  return val.length < 120;
}, 'Title too long');

Virtual properties:

javascript 复制代码
blogSchema.virtual('summary').get(function() {
  return this.title + ' - ' + this.author;
});

Mongoose simplifies the complexity of interacting with MongoDB in Node.js applications through Schemas and Models, along with other advanced features. These tools effectively facilitate database operations.

相关推荐
程序员爱钓鱼13 小时前
Node.js 编程实战:即时聊天应用 —— WebSocket 实现实时通信
前端·后端·node.js
迦南giser17 小时前
webpack从0到1详解
前端·javascript·css·webpack·node.js
C_心欲无痕17 小时前
使用 FNM (Fast Node Manager) 管理多个 Node.js 版本
前端·node.js
橙序员小站17 小时前
解密前端包管理工具:npm、Yarn与pnpm的全面对比
前端·npm·node.js
用户4270074583817 小时前
第六节:添加响应中间件、redis链接、配置redis store中间件、跨域配置
node.js
Merlyn1018 小时前
NVM介绍及Windows下的安装
windows·node.js·nvm
TDengine (老段)18 小时前
Node.js 语言连接器进阶指南
大数据·物联网·node.js·编辑器·vim·时序数据库·tdengine
哈哈哈hhhhhh20 小时前
使用 Node.js 从零开始构建你自己的 Web 服务器
服务器·node.js
搞全栈小苏20 小时前
使用 nvm(不破坏系统)Linux 上把 Node.js / npm 升级到你指定版本(Node v23.x、npm 10.x)
linux·npm·node.js
放逐者-保持本心,方可放逐20 小时前
Node.js 多线程与高并发+实例+思考(简要版)
node.js·编辑器·vim·高并发·多线程·场景应用实例