在实际前端应用开发中,使用数据库存储数据并进行 CRUD 操作是非常常见的需求。而 Mongoose 是一个优秀的在 Node.js 环境下操作 MongoDB 数据库的库,它提供了直观的 Schema 设计、强大的查询 API 以及方便的中间件机制。但在使用 Mongoose 进行数据库操作时,常常需要将一些常用操作进行封装,以提高代码复用性和可读性。而 r2mongoose 这个 npm 包就是为了解决这个问题而设计的。
安装 r2mongoose
使用以下命令来安装 r2mongoose:
npm install r2mongoose
使用 r2mongoose
连接数据库
在使用 r2mongoose 进行数据库操作之前,需要先创建数据库连接。可以通过 r2mongoose.connect()
方法来连接数据库:
const r2mongoose = require('r2mongoose'); r2mongoose.connect('mongodb://localhost/test');
定义 Schema
Mongoose 的核心是 Schema,它定义了数据库存储的数据结构和限制。使用 r2mongoose,可以通过 r2mongoose.Schema()
方法来定义 Schema:
-- -------------------- ---- ------- ----- ---------- - ---------------------- ----- ------ - ------------------ ----- ---------- - --- -------- ----- ------- ---- ------ --- ----- ---- - ------------------------ ------------
基本 CRUD 操作
定义好 Schema 后,就可以通过 r2mongoose 提供的方法进行 CRUD 操作了。
1. Create
-- -------------------- ---- ------- ----- ---- - ------------------------- ----- ---- - --- ------ ----- ------ ---- -- --- ----------------------- - -- ----- ----- ---- ----------------- ----- ---------------- ---
2. Read
const User = r2mongoose.model('User'); User.find({}, function(err, users) { if (err) throw err; console.log(users); });
3. Update
const User = r2mongoose.model('User'); User.findOneAndUpdate({ name: 'Bob' }, { age: 20 }, function(err) { if (err) throw err; console.log('User updated successfully!'); });
4. Delete
const User = r2mongoose.model('User'); User.findOneAndDelete({ name: 'Bob' }, function(err) { if (err) throw err; console.log('User deleted successfully!'); });
链式调用
r2mongoose 支持链式调用,可以让代码更加简洁优雅:
-- -------------------- ---- ------- ----- ---- - ------------------------- ------------- --------------- --------------------- ------------ ------------------- ------ - -- ----- ----- ---- ------------------- ---
中间件
r2mongoose 支持在执行 CRUD 操作前或后,执行相应的中间件。可以通过 schema.pre()
和 schema.post()
方法来设置中间件:
-- -------------------- ---- ------- ----- ---------- - --- -------- ----- ------- ---- ------ --- ---------------------- -------------- - ------------------- ---------- ------- --- ----------------------- -------------- ----- - ----------------- ----- ---------------- ------- --- ----- ---- - ------------------------ ------------ ----- ---- - --- ------ ----- ------ ---- -- --- ----------------------- - -- ----- ----- ---- ---
在上面的例子中,schema.pre()
方法会在执行 user.save()
方法前输出 'Saving user...',而 schema.post()
方法则会在执行 user.save()
方法后输出 'User saved successfully!'。
参考文献
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055e2e81e8991b448dbad1