在现代 Web 开发中,涉及到的大多数应用程序需要数据库支持。实现便捷而高效的访问数据库的方式就是使用 Mongoose。Mongoose 是一种基于 Node.js 平台的 MongoDB 库,提供了对 MongoDB 的数据模型声明式定义、查询、校验等功能。本篇文章将会介绍 Mongoose 的基础知识,并提供一些实际案例。
安装 Mongoose
在开始前,需要确保本地已经成功安装了 Node.js 和 MongoDB。如果尚未安装,可以参考官方网站的文档进行安装。
安装 Mongoose 的命令行工具,使用以下命令:
npm install mongoose
当安装完成后,就可以在项目中导入 Mongoose 了:
const mongoose = require('mongoose')
连接到 MongoDB
要使用 Mongoose 连接到 MongoDB,需要提供 MongoDB 实例的 URL。可以使用以下命令创建 Mongoose 的连接:
mongoose.connect('mongodb://localhost/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true }).catch((err) => console.log(`mongoose connection error: ${err.message}`))
这个代码片段使用了 mongoose.connect()
方法来连接到本地 MongoDB 实例,其中第一个参数是 MongoDB 实例的 URL,第二个是对象的参数包含其它各种选项。在这种情况下,我们通过设置 useNewUrlParser
和 useUnifiedTopology
来控制 MongoDB 驱动程序的行为。
使用 Mongoose 连接到 MongoDB 后,可以通过 mongoose.connection
类获取到连接。
定义模式
Mongoose 提供了一个 Schema 类来定义 MongoDB 中的数据模型。每个 schema 中可以包含属性和方法,可以设置 default、validate、unique 等属性,也可以嵌套其他 schema。以下是一个简单的示例:
const { Schema } = mongoose const BookSchema = new Schema({ title: { type: String, required: true, unique: true }, author: String, date: { type: Date, default: Date.now } })
这个代码片段创建了一个 BookSchema 对象,它有三个属性: title
,author
和 date
。其中 title
和 date
属性分别是 String 和 Date 类型,并且 title
属性必须设置为 required
和 unique
。
对于嵌套的 schema,可以使用以下方法:
const BookSchema = new Schema({ title: String, author: { name: String, email: String } })
定义模型
通过一个 schema 可以创建多个 Model,每个 model 对应一个 MongoDB 集合,Model 的每个实例对应集合中的一条数据。以下是一个创建 model 的例子:
const Book = mongoose.model('Book', BookSchema)
这个代码片段创建了一个名为 "Book" 的 model。Model 通过使用 Mongoose API 将模型映射到 MongoDB 集合。
创建文档
模型定义后,就可以使用模型创建文档并将其保存到 MongoDB 中了。以下是一个简单的写入新书籍的示例:
const newBook = new Book({ title: 'JavaScript for Dummies', author: 'Soobin Kim', date: new Date('2021-01-01T00:00:00.000Z') }) newBook.save()
这个代码片段创建了一个新的 Book 文档并将其保存到 MongoDB 中。Mongoose 会自动为新文档分配一个 _id 属性,并将其添加到 Book 集合中。
查询
Mongoose 的查询 API 相当丰富,这是因为 Mongoose 建立在 MongoDB 驱动程序之上,后者本身提供了很多强大的查询功能。
以下是一些简单的示例:
// 查询所有书籍 const allBooks = await Book.find() // 查询title为"JavaScript for Dummies"的书籍 const book = await Book.findOne({ title: 'JavaScript for Dummies' }) // 查询所有以 "Java" 开头的书籍 const books = await Book.find({ title: /^Java/ })
这里使用的是 Mongoose 的 Model API,它返回一个普通的 JavaScript Promise。
更新文档
可以使用 Model.updateOne 或 Model.updateMany 方法来更新文档。例如,以下示例将更新具有给定 ID 的图书的 title
属性:
const result = await Book.updateOne({ _id: '123' }, { title: 'New Title' })
这个代码片段使用 updateOne()
方法,它将查询 _id
值为 123 的书籍,并将其 title
属性设置为 "New Title"。
删除文档
使用 Model.deleteOne 或 Model.deleteMany 方法来从 MongoDB 中删除文档。
以下是一个简单的例子:
const result = await Book.deleteOne({ title: 'JavaScript for Dummies' })
这个代码片段删除 MongoDB 中的所有 title
属性为 JavaScript for Dummies
的文档。
以上是 Mongoose 的基础知识介绍,包括连接到 MongoDB、定义模式、定义模型、创建文档、查询、更新文档和删除文档。
总结
Mongoose 使得在 Node.js 应用程序中访问 MongoDB 变得容易和高效。本文介绍了 Mongoose 的基础知识、学习以及指导意义,并通过一些简单而实用的代码示例展示了 Mongoose API 的一些主要方面。要使用 Mongoose 完整的功能,需要深入学习其 API,例如查询嵌套文档、生命周期钩子、中间件、事务等。建议大家使用 Mongoose,提高代码效率并使工作更加便捷、高效。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b36b0748841e9894faf9c9