Mongoose 是一个 Node.js 中用于操作 MongoDB 的 Object-Document Mapping (ODM) 库,它提供了丰富的 API 和强大的数据验证、查询和处理能力。在 Express.js 应用程序中使用 Mongoose 可以非常方便地操作数据库,本文将介绍 Mongoose 中的数据库查询操作详解,帮助初学者深入理解和掌握 Mongoose 的使用。
连接数据库
使用 Mongoose 操作 MongoDB 之前,需要先连接到数据库。连接过程如下:
const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/my_database', {useNewUrlParser: true});
其中 mongodb://localhost/my_database
是 MongoDB 的连接字符串,useNewUrlParser: true
表示使用新版 MongoDB 驱动器进行解析,这是必要的。
定义模式和模型
在 Mongoose 中,数据存储在集合 (Collection) 中,每个集合都对应着一个模型 (Model),模型定义了集合的结构、字段类型和默认值等等。在定义模型之前需要先定义模式 (Schema),并将模式和集合进行绑定。例如定义一个简单的博客文章模型可以这样:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------------- - --- ----------------- ------ ------- -------- ------- ---------- - ----- ----- -------- --------- -- --- ----- ------- - ------------------------- ---------------
在这个例子中,我们定义了一个名为 Article
的模型,它关联到 articles
集合,同时定义了包含 title
、content
和 createdAt
字段的模式。注意,model
函数的第一个参数是模型的名称,会被自动用作集合的名称,所以不需要手动指定集合名称。
查询操作
Mongoose 中的查询操作可以非常方便地进行复杂的数据库查询和条件筛选。基本的查询操作如下:
查询所有文档
Article.find({}, (err, articles) => { // ... });
这个代码片段会查询 articles
集合中的所有文档,并将结果存放在 articles
数组中。如果查询成功,err
将会是 null
,否则会是一个错误对象。
按条件查询文档
使用 find()
函数可以按照指定条件查询文档:
Article.find({title: 'Mongoose Tutorial'}, (err, articles) => { // ... });
这个代码片段会查询 title
字段为 Mongoose Tutorial
的文档,并将结果存放在 articles
数组中。
条件组合查询
可以使用逻辑运算符 $and
、$or
、$nor
、$not
或者 $in
、$nin
、$gt
、$gte
、$lt
、$lte
等运算符进行条件组合查询:
Article.find({$or: [{title: 'Mongoose Tutorial'}, {title: 'Node.js Tutorial'}]}, (err, articles) => { // ... });
这个代码片段会查询 title
字段为 Mongoose Tutorial
或者 Node.js Tutorial
的文档,并将结果存放在 articles
数组中。
查询单个文档
使用 findOne()
函数可以查询符合条件的第一个文档:
Article.findOne({title: 'Mongoose Tutorial'}, (err, article) => { // ... });
这个代码片段会查询 title
字段为 Mongoose Tutorial
的第一个文档,并将结果存放在 article
变量中。
查询文档数量
使用 count()
函数可以查询符合条件的文档数量:
Article.count({title: 'Mongoose Tutorial'}, (err, count) => { // ... });
这个代码片段会查询 title
字段为 Mongoose Tutorial
的文档数量,并将结果存放在 count
变量中。
排序查询结果
可以使用 sort()
函数对查询结果进行排序:
Article.find({}).sort('-createdAt').exec((err, articles) => { // ... });
这个代码片段会查询 articles
集合中的所有文档,并按照 createdAt
字段进行降序排列,将结果存放在 articles
数组中。
分页查询
可以使用 skip()
和 limit()
函数对查询结果进行分页:
Article.find({}).skip(20).limit(10).exec((err, articles) => { // ... });
这个代码片段会查询 articles
集合中的所有文档,从第 21 条开始,取出 10 条记录,并将结果存放在 articles
数组中。
使用正则表达式查询
可以使用正则表达式进行模糊查询:
Article.find({title: /Tutorial/}, (err, articles) => { // ... });
这个代码片段会查询 title
字段包含 Tutorial
字符串的所有文档,并将结果存放在 articles
数组中。
总结
本文介绍了如何在 Express.js 应用程序中使用 Mongoose 数据库查询操作。学习使用 Mongoose 可以极大地提高开发效率,同时还提供了很多方便的开发工具和数据处理能力,帮助我们更好地构建 Web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ab586a48841e989472bb2a