Mongoose是什么?
发布时间:2023-09-21 14:28:19 所属栏目:系统 来源:
导读:Mongoose是什么?如何使用?对于刚接触MongoDB朋友来说,可能对用户Mongoose并不是很了解,这篇文章小编就给大家介绍一下Mongoose以及使用,感兴趣的朋友可以了解一下。
Mongoose是MongoDB的一个对象模型工具,封
Mongoose是MongoDB的一个对象模型工具,封
Mongoose是什么?如何使用?对于刚接触MongoDB朋友来说,可能对用户Mongoose并不是很了解,这篇文章小编就给大家介绍一下Mongoose以及使用,感兴趣的朋友可以了解一下。 Mongoose是MongoDB的一个对象模型工具,封装了许多MongoDB对文档的的增删改查等常用方法,让NodeJS操作Mongodb数据库变得更加灵活简单。 在egg项目中如何使用? 1、安装 npm i egg-mongoose --save 2、配置 在根目录下的/config/plugin.js中配置插件 exports.mongoose = { enable: true, package: 'egg-mongoose', }; 3、连接数据库 在根目录下的/config/config.default.js增加配置,其中url为我们的数据库地址,可通过环境变量来区分开发环境还是生产环境,并且确定是否使用用户名密码的数据库 const prod = process.env.npm_config_server_prod; mongoose: { client: { url: prod ? 'mongodb:eggadmin:123456@localhost:27017/DbName' : 'mongodb://127.0.0.1:27017/DbName', options: { useUnifiedTopology: true, }, }, }, 4、配置与使用 (1)数据表配置 在app目录下新建model文件夹,在model文件夹下新建JS文件作为数据表的配置内容,下面以书籍表的配置为例 'use strict'; /** * @description: Mongoose book Schema, */ module.exports = app => { const mongoose = app.mongoose; const Schema = mongoose.Schema; const BookSchema = new Schema({ desc: { type: String }, /* 书籍描述 */ name: { type: String }, /* 书籍名称 */ press: { type: String }, /* 出版社 */ author: { type: String }, /* 作者 */ image: { type: Array }, /* 书籍图片列表*/ price: { type: String }, /* 价格 */ book_type: { /* 书籍分类id */ type: Schema.Types.ObjectId, ref: 'BookClassify', }, user: { /* 书籍发布者id */ type: Schema.Types.ObjectId, ref: 'User', }, create_time: { type: String }, /* 创建时间 */ status: { type: String }, /* 状态,1:待购买,2:已购买*/ look: { type: Number } /* 浏览数量 */ }); return mongoose.model('Book', BookSchema); }; 可以看到我们可以通过Schema来定义表结构,可以指定字段的类型及关联,设置完字段后就可以生成model了,这里算是非常简单的配置,更多配置方法可参考文档 (2)、使用mongoose方法 配置完数据表结构后,我们就可以再service层中调用mongoose的方法对文档进行增删查改了,已书籍列表的处理逻辑为例子 async findbookList(data) { const { type, page, pageSize, desc, status, userId } = data; const searchVal = {} if (type) { searchVal.book_type = mongoose.Types.ObjectId(type) } if (status) { searchVal.status = status } if (userId) { searchVal.user = mongoose.Types.ObjectId(userId) } const search_term = { $or: [ { desc: { $regex: desc ? desc : '', $options: '$i' } }, { name: { $regex: desc ? desc : '', $options: '$i' } }, { author: { $regex: desc ? desc : '', $options: '$i' } }, { press: { $regex: desc ? desc : '', $options: '$i' } }, ], }; const totalNum = await this.ctx.model.Book.find(searchVal).and(search_term).countDocuments(); const result = await this.ctx.model.Book.find(searchVal) .populate({ path: 'user', select: { name: 1, image: 1 } }) .populate({ path: 'book_type' }) .and(search_term) .sort({ create_time: -1 }) .skip((parseInt(page) - 1) * parseInt(pageSize)) .limit(parseInt(pageSize)); return result ? { bean: { records: result, current: page, size: result.length, total: totalNum, }, ...app.config.msg.GET_SUCCESS } : app.config.msg.GET_ERR; } 可以看到,通过this.ctx.model.Book就可以获取到Book的model并且可以调用mongoose需要的方法,例如populate、find、and、sort、skip、limit 等等。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐