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 "htmlcode">'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 "htmlcode">this.ctx.model.Book.create(data,callback);其中data为json数据结构,callback为操作后的回调函数
查询数据
获取所有数据,返回是一个数组
this.ctx.model.Book.find()获取一个数据,返回是一个对象
this.ctx.model.Book.findOne()条件查询
this.ctx.model.Article.find(conditions,callback);其中conditions为查询的条件,callback为回调函数
conditions有一下几种情况:具体数据:
this.ctx.model.Book.find ( {_id:5c4a19fb87ba4002a47ac4d, name: "射雕英雄传" } , callback) ;条件查询:
"$lt" 小于 "$lte" 小于等于 "$gt" 大于 "$gte" 大于等于 "$ne" 不等于 // 查询价格大于100小于200的书籍数组 this.ctx.model.Book.find({ "price": { $get:100 , $lte:200 });或查询 OR
"$in" 一个键对应多个值 "$nin" 同上取反, 一个键不对应指定值 "$or" 多个条件匹配, 可以嵌套 $in 使用 "$not" 同上取反, 查询与特定模式不匹配的文档 this.ctx.model.Book.find({"name":{ $in: ["射雕","倚天"]} );删除数据
this.ctx.model.Book.remove(conditions,callback);更新数据
this.ctx.model.Book.update(conditions, update, callback)conditions为条件,update是更新的值对象
排序
this.ctx.model.Book.sort({ create_time: -1 });其中-1表示降序返回。 1表示升序返回
限制数量
this.ctx.model.Book.limit(number);number表示限制的个数
跳过文档返回
this.ctx.model.Book.skip(number);number表示跳过的个数,skip经常搭配limit实现分页的功能
条件数组and
在find后面可使用and对查询结果进行进一步条件筛选,相当于并且的意思。
const search_term = { $or: [ { desc: { $regex: desc "htmlcode">// 在model中配置字段时候指定关联的表名,就可以通过populate来进行表的关联查询 user: { /* 书籍发布者id */ type: Schema.Types.ObjectId, ref: 'User', }, this.ctx.model.Book.find() .populate({ path: 'user', select: { name: 1, image: 1 } })聚合管道Aggregate
this.ctx.model.Template.aggregate([ { $match: { name } }, { $sort: { create_time: -1 } }, { $group: { _id: '$name', user_id: { $first: '$modifier' } } }, ]);Mongoose聚合管道aggregate常用的操作有$project 、$match 、$group、$sort、$limit、$skip、$lookup 表关联
批量操作bulkWrite
const template_list = await ctx.model.Template.aggregate([ { $sort: { create_time: -1 } }, { $group: { _id: '$name', template_id: { $first: '$_id' }, label: { $first: '$label' } } }, ]); const update_value = []; template_list.forEach(item => { if (!item.label) { update_value.push({ updateOne: { filter: { _id: item.template_id }, update: { label: '' }, }, }); } }); await ctx.model.Template.bulkWrite(update_value);可以进行一系列批量增加、删除、更新等操作。
mongoose还有非常多的方法可以提供给我的灵活使用,我们在使用的时候可以结合业务逻辑选择合适的方法来提高我们操作数据库的效率。在我们使用它之前可以认真的阅读官方文档
总结
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]