亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > MongoDB > 正文

Mongoose是什么?如何使用?

2024-09-07 00:22:29
字體:
來源:轉載
供稿:網(wǎng)友
       Mongoose是什么?如何使用?對于剛接觸MongoDB朋友來說,可能對用戶Mongoose并不是很了解,這篇文章小編就給大家介紹一下Mongoose以及使用,感興趣的朋友可以了解一下。
 
        Mongoose是什么?
 
        Mongoose是MongoDB的一個對象模型工具,封裝了許多MongoDB對文檔的的增刪改查等常用方法,讓NodeJS操作Mongodb數(shù)據(jù)庫變得更加靈活簡單。
 
        在egg項目中如何使用?
 
        1、安裝
 
npm i egg-mongoose --save
 
        2、配置
 
        在根目錄下的/config/plugin.js中配置插件
 
exports.mongoose = {
 enable: true,
 package: 'egg-mongoose',
};
        3、連接數(shù)據(jù)庫
 
        在根目錄下的/config/config.default.js增加配置,其中url為我們的數(shù)據(jù)庫地址,可通過環(huán)境變量來區(qū)分開發(fā)環(huán)境還是生產(chǎn)環(huán)境,并且確定是否使用用戶名密碼的數(shù)據(jù)庫
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)數(shù)據(jù)表配置
 
        在app目錄下新建model文件夾,在model文件夾下新建JS文件作為數(shù)據(jù)表的配置內(nèi)容,下面以書籍表的配置為例
 
'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: { /* 書籍發(fā)布者id */
 type: Schema.Types.ObjectId,
 ref: 'User',
 },
 create_time: { type: String }, /* 創(chuàng)建時間 */
 status: { type: String }, /* 狀態(tài),1:待購買,2:已購買*/
 look: { type: Number } /* 瀏覽數(shù)量 */
 });
 return mongoose.model('Book', BookSchema);
};
        可以看到我們可以通過Schema來定義表結構,可以指定字段的類型及關聯(lián),設置完字段后就可以生成model了,這里算是非常簡單的配置,更多配置方法可參考文檔
 
        (2)、使用mongoose方法
 
        配置完數(shù)據(jù)表結構后,我們就可以再service層中調(diào)用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并且可以調(diào)用mongoose需要的方法,例如populate、find、and、sort、skip、limit 等等。
 
        5、egg-Mongoose常用的方法
 
        增加數(shù)據(jù)
 
this.ctx.model.Book.create(data,callback);
        其中data為json數(shù)據(jù)結構,callback為操作后的回調(diào)函數(shù)
 
        查詢數(shù)據(jù)
 
        獲取所有數(shù)據(jù),返回是一個數(shù)組
 
this.ctx.model.Book.find()
        獲取一個數(shù)據(jù),返回是一個對象
 
this.ctx.model.Book.findOne()
        條件查詢
 
this.ctx.model.Article.find(conditions,callback);
        其中conditions為查詢的條件,callback為回調(diào)函數(shù)
conditions有一下幾種情況:
 
        具體數(shù)據(jù):
 
this.ctx.model.Book.find
(
{_id:5c4a19fb87ba4002a47ac4d, name: "射雕英雄傳"
}
, callback)
;
        條件查詢:
 
"$lt" 小于
"$lte" 小于等于
"$gt" 大于
"$gte" 大于等于
"$ne" 不等于
// 查詢價格大于100小于200的書籍數(shù)組
this.ctx.model.Book.find({ "price": { $get:100 , $lte:200 });
        或查詢 OR
 
"$in" 一個鍵對應多個值
"$nin" 同上取反, 一個鍵不對應指定值
"$or" 多個條件匹配, 可以嵌套 $in 使用
"$not" 同上取反, 查詢與特定模式不匹配的文檔
 
this.ctx.model.Book.find({"name":{ $in: ["射雕","倚天"]} );
        刪除數(shù)據(jù)
 
this.ctx.model.Book.remove(conditions,callback);
        更新數(shù)據(jù)
 
this.ctx.model.Book.update(conditions, update, callback)
        conditions為條件,update是更新的值對象
 
        排序
 
this.ctx.model.Book.sort({ create_time: -1 });
        其中-1表示降序返回。 1表示升序返回
 
        限制數(shù)量
 
this.ctx.model.Book.limit(number);
        number表示限制的個數(shù)
 
        跳過文檔返回
 
this.ctx.model.Book.skip(number);
        number表示跳過的個數(shù),skip經(jīng)常搭配limit實現(xiàn)分頁的功能
 
        條件數(shù)組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)
        關聯(lián)查詢populate
 
// 在model中配置字段時候指定關聯(lián)的表名,就可以通過populate來進行表的關聯(lián)查詢
user: { /* 書籍發(fā)布者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 表關聯(lián)
 
        批量操作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還有非常多的方法可以提供給我的靈活使用,我們在使用的時候可以結合業(yè)務邏輯選擇合適的方法來提高我們操作數(shù)據(jù)庫的效率。在我們使用它之前可以認真的閱讀官方文檔。

(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
久久五月精品中文字幕| 毛片在线网址| av网址在线观看免费| 国产午夜小视频| 国产成人在线免费观看视频| 精品一区二区三区五区六区七区| а天堂8中文最新版在线官网| 日韩一区二区三区高清免费看看| 国产一区二区在线视频| 国产精品丝袜xxxxxxx| 日韩综合在线观看| 日韩激情免费视频| 啊啊啊久久久| 91精彩视频在线观看| 亚洲区一区二区三| 国产欧美久久久精品免费| 午夜一区二区三区在线观看| 日韩成人手机在线| 亚洲国产第一| 污污网址在线观看| av软件在线观看| 亚洲国产日产av| 亚洲天堂久久新| 成人在色线视频在线观看免费大全| 婷婷丁香六月天| 50路60路老熟妇啪啪| 最新av在线播放| 亚洲黄色在线免费观看| 在线看中文字幕| 日本在线视频1区| 在线一区二区三区四区| 久久精品国产精品| 成人免费网站视频| 国产成人av资源| 麻豆av免费在线观看| 福利在线一区二区| 91麻豆免费看| 91精品国产综合久久久久久久| 精品乱码一区二区三四区视频| 宅男午夜视频| 青青成人在线| 亚洲老板91色精品久久| 黄色裸体一级片| 女人在下体塞跳蛋在线观看| 偷偷要 色偷偷| 日本黄网免费一区二区精品| 黄色一级片在线| 伊人五月天婷婷| 欧美亚洲精品天堂| 久久久久免费精品国产| av电影在线观看完整版一区二区| www.97视频| 91精品欧美久久久久久动漫| 五月婷婷综合在线观看| 日韩高清三级| 日韩亚洲第一页| 中日韩美女免费视频网址在线观看| 亚洲影音先锋| 色狠狠久久av五月综合|| 久久在线免费观看视频| 亚洲美女网站| 天天操天天干天天爽| 精品国产亚洲一区二区三区大结局| 欧美三级乱人伦电影| 你懂的视频网| 欧美成人精品一区二区免费看片| 国产肥臀一区二区福利视频| 国产青草视频在线观看| 日韩av播放器| 香蕉综合视频| 中文字幕一区二区三区四区不卡| 国产av一区二区三区传媒| 国内露脸中年夫妇交换精品| 欧美午夜视频在线观看| 欧美夫妻性生活| 香蕉人人精品| 国产一级在线视频| 国产精品高潮呻吟AV无码| 亚洲一区二区三区免费观看| av中文字幕一区二区| 国产人与禽zoz0性伦| www.超碰在线| 精品欧美一区二区精品久久| 鲁片一区二区三区| 一区二区三区四区乱视频| 欧美一区二区三区精品| 欧美啪啪精品| 日日天天狠狠| 88xx成人免费观看视频库| 99国产精品一区| 欧美国产欧美亚州国产日韩mv天天看完整| 日韩欧国产精品一区综合无码| 精品少妇一区二区三区在线视频| 日韩欧美亚洲在线| 99热这里只有精品在线播放| 黄色a级三级三级三级| 影视一区二区三区| 欧美不卡高清一区二区三区| 欧美一区久久| 欧美激情综合网| 国产三区四区在线观看| 成人自拍av| 一区二区免费| 相泽南亚洲一区二区在线播放| 久久国产在线观看| 图片婷婷一区| 99精品国产高清在线观看| 欧美日本一区| av无码精品一区二区三区宅噜噜| 91麻豆精品一区二区三区| 国产一区二区三区精彩视频| 宅男66日本亚洲欧美视频| 99精品国产视频| 亚洲第一区在线观看| 国产亚洲精品自拍| 精品一区二区三区蜜桃在线| 日韩情涩欧美日韩视频| 欧美亚洲综合一区| 精品国模一区二区三区欧美| 精久久久久久久久久久| 伊人精品久久| 4388成人网| www免费在线观看视频| 一区二区三区午夜| 国产美女视频网站| 伊人精品成人久久综合软件| 欧美一二三不卡| 色屁屁草草影院ccyy.com| 亚洲视频手机在线观看| 亚洲第一区在线| 在线观看黄色av网站| 欧美第一精品| 秋霞av在线| 欧美激情黑白配| 欧美精品第1页| 国产精品爽爽久久| 欧美亚洲成人网| 亚洲国产精品久久久久婷婷老年| 国产在线精品一区二区三区不卡| 亚洲av无码国产精品久久不卡| 国产精品99精品无码视| 8888在线观看免费www| 成年人免费高清视频| 国产一级一片免费播放| 91色在线porny| 亚洲国产成人精品视频| 黄色一级片在线| 国产情侣自拍av| 久久免费精品视频| 青青草av在线播放| 乱人伦中文视频在线| 亚洲精品成人久久| 国产模特精品视频久久久久| 国内精品国产成人国产三级粉色| 日韩欧美亚洲国产精品字幕久久久| 欧美精品久久久久久久小说| www.欧美日韩国产在线| a视频在线看| 色综合一个色综合| 一个人免费观看视频www在线播放| 国产亚洲欧美视频| 久热在线中文字幕色999舞| 在线一区二区三区视频| 国产日韩欧美电影在线观看| 久热国产精品| 久久久精品三级| 国产变态拳头交视频一区二区| 久久av超碰| 少妇无套高潮一二三区| 久久蜜桃香蕉精品一区二区三区| 国产性一乱一性一伧一色| 国产精品成人va在线观看| 国产高清自拍视频在线观看| 亚洲夫妻av| 国产一区二区三区视频播放| 亚洲免费视频一区| 国产97在线|日韩| 91蜜桃传媒精品久久久一区二区| 久久精品影视伊人网| 最近2018中文字幕免费在线视频| 亚洲欧洲日本专区| 欧美亚洲另类色图| 泷泽萝拉在线播放| 天天爱天天操天天干| 911美女片黄在线观看游戏| 日日夜夜综合| 色噜噜狠狠狠综合欧洲色8| 日韩在线影院| 中文字幕亚洲精品| 成人羞羞视频免费看看| 国产一区二区三区影院| 美女福利视频网| bt7086福利一区国产| 先锋影音亚洲资源| 亚洲一区二区三区精品在线| 亚洲成年人电影在线观看| 好看的中文字幕在线播放| 成年永久一区二区三区免费视频| 成人xxxxx| 国产美女网站视频| 在线免费电影网| 中文字幕12页| 日韩国产激情在线| 试看120秒一区二区三区| 91蝌蚪九色| 免费动漫网站在线观看| 欧美草草影院在线视频| 国产婷婷在线观看| 中文字幕一区二区三区5566| 久久嫩草精品久久久久| 国产麻豆日韩欧美久久| 国产情侣小视频| 一本色道久久hezyo无码| 国产精品视频免费一区二区三区| caopeng在线| 色综合天天爱| 丁香天五香天堂综合| 在线看免费毛片| 精品久久久久av| 亚洲一区亚洲二区| 国产精品欧美一区二区三区奶水| 国产精品丝袜高跟| 国产精品后入内射日本在线观看| 18精品爽视频在线观看| 91极品女神私人尤物在线播放| 亚洲精品1234| 国产福利电影在线观看| 极品一线天粉嫩虎白馒头| 国产高清精品网站| 婷婷开心激情综合| 色大师av一区二区三区| 91在线资源站| 成人区一区二区| 美女又爽又黄免费动漫| 久久精品国产99久久| 天天综合网天天综合色| 日本猛少妇色xxxxx免费网站| 成人小视频在线播放| 亚洲中文字幕在线一区| 日韩国产一区二区三区| 国产精选一区二区三区| 尤物yw午夜国产精品视频明星| 九九九久久久| 久久久久久亚洲精品不卡4k岛国| 91免费观看| 国产一区二区视频网站| 美女av免费看| 欧美国产欧美综合| xxxx性bbbb欧美野外| 亚洲自拍小视频免费观看| 国产乱视频在线观看| 日韩av中文字幕一区二区三区| 日韩亚洲欧美中文高清在线| 欧美三级电影一区二区三区| 亚洲尤物影院| 国产高清视频网站| 欧美精品首页| 日本成人福利| 天天色图综合网| 欧美深深色噜噜狠狠yyy| 亚洲一级一级97网| 国产精品二区在线| 欧美777四色影视在线| 法国伦理少妇愉情| 最新中文字幕在线观看| 无码免费一区二区三区| 国产高清久久| 亚洲最新永久观看在线| 91白丝在线| 国产一区二区三区视频播放| 麻豆传媒视频在线观看| 日本精品入口免费视频| 在线视频91| 精一区二区三区| 麻豆蜜桃在线观看| 国产欧美日韩电影| 国产成人综合自拍| 男人天堂电影网| koreanbj精品视频一区| 一区二区三区在线不卡| 日本亲与子乱a| 五月综合久久| 色综合久久久无码中文字幕波多| 一区二区成人在线视频| 伊人久久免费视频| 在线播放中文字幕一区| 91精品久久久久久久| 欧美videofree性高清杂交| 欧美久久久久久久久中文字幕| 一本色道久久88亚洲综合88| 狠狠躁夜夜躁久久躁别揉| 国产91精品看黄网站在线观看| 人妖欧美一区二区| 999精品视频在这里| 91福利免费观看| 四虎影视在线观看2413| 免费黄色av网站| 欧美人牲a欧美精品| 天海翼一区二区三区四区在线观看| 久久都是精品| 欧美高清激情视频| 青青久草在线| 韩国精品主播一区二区在线观看| 伊人久久青草| 韩国毛片一区二区三区| 爱豆国产剧免费观看大全剧苏畅| a天堂中文字幕| 色诱视频在线观看| 久久日韩精品一区二区五区| 欧美高清另类hdvideosexjaⅴ| 欧美粗暴性video| 久久一夜天堂av一区二区三区| 一区二区三区激情| 午夜激情在线视频| 99久久99久久免费精品蜜臀| 九九热在线免费视频| 欧美一区二区在线观看视频| 亚洲精品久久久久久久久久| 麻豆国产精品视频| 天天想你在线观看完整版电影免费| 国产精品波多野结衣| 成人小视频在线观看免费| 国精产品一区一区二区三区mba| 香蕉97视频观看在线观看| 羞羞视频在线观看欧美| 2025国产精品视频| 国产高潮流白浆喷水视频| 91香蕉国产在线观看|