国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 數據庫 > MongoDB > 正文

Mongoose 在egg中的使用詳解

2020-10-29 18:40:27
字體:
來源:轉載
供稿:網友

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 等等。

5、egg-Mongoose常用的方法

增加數據

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 ? desc : '', $options: '$i' } }, { name: { $regex: desc ? desc : '', $options: '$i' } }, { author: { $regex: desc ? desc : '', $options: '$i' } }, { press: { $regex: desc ? desc : '', $options: '$i' } }, ], }; this.ctx.model.Book.find().and(search_term)

關聯查詢populate

// 在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還有非常多的方法可以提供給我的靈活使用,我們在使用的時候可以結合業務邏輯選擇合適的方法來提高我們操作數據庫的效率。在我們使用它之前可以認真的閱讀官方文檔

總結

到此這篇關于Mongoose 在egg中的使用詳解的文章就介紹到這了,更多相關egg中使用Mongoose內容請搜索武林網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
久草一本av| 亚洲欧美自拍另类| 青青国产在线| 在线视频1区2区| 国产国语**毛片高清视频| 中文字幕av中文字幕| 天堂在线免费观看| 国产天堂在线播放视频| 国产精选在线观看| 国产精品视频福利一区二区| 国产亚av手机在线观看| 国产精品va在线观看视色| 99热免费在线| 国产在线一二| 国产探花视频在线观看| 69久久精品| 精品视频一区二区观看| 在线观看国产福利视频| 男人天堂99| 国产高清一区二区三区视频| 在线视频婷婷| 丁香视频五月| 91亚洲天堂| h视频在线网站| 天堂在线免费视频| 精品国内自产拍在线视频| 九九热免费视频| 精品剧情v国产在线观看| www亚洲天堂| 国产二级片在线| 国产中文字幕在线观看| 国产一区二区影视| 亚洲国产成人综合| 五月婷婷在线观看| 青青青青在线| 国产对白国语对白| 国产乱码在线| 欧美精品一区二区三区免费| 国产福利在线播放麻豆| 中文字幕专区| 久草在线资源福利| 日本一卡二卡四卡精品| 精品精品导航| 国产99在线|亚洲| 国产精品伦理一区二区三区| 久久精品最新免费国产成人| 亚洲综合在线不卡| av网站大全在线| 中文在线官网天堂| 国产精品免费麻豆入口| 国产私人影院| 国产精品免费视频二三区| 天堂中文在线视频| 国产一卡2卡3卡免费网站| 91超碰在线免费| 91xxx在线观看| 国产一级免费看| 中文字幕在线观看av| 国产在线看片| 天堂在线视频| 国产色视频网站| 国产一区二区三区不卡免费观看 | 丁香花在线电影| 免费一区二区在线观看| 免费看的毛片| 成人无遮挡免费网站视频在线观看| 美女网站在线观看| 国产午夜三区视频在线| 91精品大全| 日本久久网站| 国产一卡2卡3卡4卡网站免费| 国产精品国产三级国产试看| 国产www在线观看| 亚洲人av在线| 色综合久久五月天| 国产无遮挡在线视频免费观看| 国产一级在线观看www色| 91最新在线| 国产蜜臀在线| 在线国产1区| 国产精品自产拍在线网站| 精品999视频| 国产麻豆麻豆| 亚洲精品午夜级久久久久| 粉嫩av一区| 亚洲欧美小说国产图片| 国产一级免费| 日本视频三区| 国产成人亚洲综合小说区| av在线首页| 国产私人影院| 快射av在线播放一区| 国产对白叫床清晰在线播放| 欧美性xxxx交| 亚洲免费网站在线观看| 国产黄视频在线观看| 毛片视频免费观看| 在线视频99| 在线天堂av| 在线中文字幕第一页| 国产三级在线观看| 国产在线你懂得| 黄色国产在线| 麻豆视频在线观看免费网站| 国产视频三级在线观看播放| 日本高清中文字幕二区在线| 在线免费观看黄色片| 国产91足控脚交在线观看| 最近中文字幕mv免费高清在线| 免费看的毛片| www黄在线观看| 天天草天天干| 尤物在线精品视频| 香蕉视频在线观看网站| 亚洲精品午夜级久久久久| 精品福利影院| 亚洲成人国产综合| 免费观看v片在线观看| 另类综合图区| 青青草原av在线| 蜜桃视频中文字幕| 国产有码在线| 国产精品毛片一区二区三区四区| 国产黄视频在线观看| 国产黄色免费网| 一区二区免费播放| 青青久草在线| 国产小黄视频| 国产黄色网页| av在线不卡网站| 国产精品一区二区婷婷| 国产精品久久久久久久久鸭| 在线观看视频污| 青青九九免费视频在线| 欧美视频免费一区二区三区| 免费高清av| 国产高清免费在线播放| 四虎成年永久免费网站| 黄色av网址在线免费观看| 中文字幕视频在线免费| 91在线视频免费看| 国产在线激情视频| 国产国产国产国产国产国产| 超碰国产在线| 精品国产一区二区三区不卡在线 | 91九色在线看| 2021av在线| 国产精品久久久久久久牛牛 | 激情综合丁香| 国产不卡一卡2卡三卡4卡5卡在线| av免费在线观| 国产区视频在线| 成在在线免费视频| 国产一级激情| 久草一本av| av在线资源网| 国产高清视频在线| 国产毛片在线看| 人xxxx性xxxxx欧美| 国产欧美黑人| 国产麻豆精品入口在线观看| gogogogo高清视频在线| 影音先锋日韩| 精品推荐蜜桃传媒| 99热在线免费观看| 国产美女被草| 国产麻豆综合视频在线观看| 激情六月丁香| 免费久久网站| 九九在线视频| 欧美日韩在线视频免费观看| 亚洲va国产日韩欧美精品色婷婷| 精品无人区乱码1区2区3区免费 | 性网站在线看| 日本久久网站| 精品资源在线看| 国产精品一区二区三区视频网站 | 精品国产美女福利到在线不卡| 国产在线中文字幕| 国产美女视频一区二区三区| 国产九九九九| 国产精品视频福利一区二区 | 日本调教视频在线观看| 天堂√中文在线| 蜜桃av网站| 午夜国产视频| 国产黄色在线播放| 亚洲高清在线免费| 蜜桃av网站| 国产成+人+亚洲+欧美+综合| 在线观看精品一区二区三区| av黄色在线观看| 日本一卡二卡四卡精品| 黄色毛片在线看| 国产丝袜在线| av免费在线观| 最近中文字幕mv免费高清视频8 | www.操.com| 尤物视频网站在线观看| 精品麻豆一区二区三区|