成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > mongoDB使用投影剔除‘額外’字段的操作過程

mongoDB使用投影剔除‘額外’字段的操作過程

熱門標(biāo)簽:智能外呼系統(tǒng)官網(wǎng) 外呼線路資源屬于電信業(yè)務(wù)嗎 小裙科技電銷機器人怎樣 呼和浩特外呼系統(tǒng)原理是什么 長沙電銷外呼防封卡是什么 河南電話外呼系統(tǒng)招商 crm外呼系統(tǒng)聯(lián)系方式 內(nèi)蒙古營銷智能外呼系統(tǒng)哪個好 青白江400企業(yè)電話申請

簡介

實際開發(fā)過程中,為便于開發(fā)人員定位問題,常存在多個額外的字段。例如:增加createdAt、updatedAt字段以查看數(shù)據(jù)的創(chuàng)建和更改時間。而對于客戶端而言,無需知道其存在。針對以上情況,本文詳細介紹了“額外”字段的用途以及處理過程。

技術(shù)棧

  • mongodb 4.0.20
  • mongoose 5.10.7

1  "額外"字段是什么

1.1 "額外"是指與業(yè)務(wù)無關(guān)

mongodb中,collection中存儲的字段并不僅僅有業(yè)務(wù)字段。有些情況下,會存儲多余的字段,以便于開發(fā)人員定位問題、擴展集合等。

額外的含義是指 和業(yè)務(wù)無關(guān)、和開發(fā)相關(guān)的字段。這些字段不需要被用戶所了解,但是在開發(fā)過程中是至關(guān)重要的。

1.2 產(chǎn)生原因

產(chǎn)生額外字段的原因是多種多樣的。

  • 如使用mongoose插件向db中插入數(shù)據(jù)時,會默認的生成_id、__v字段
  • 如軟刪除,則是通過控制is_deleted實現(xiàn)..

2 額外字段的分類

額外字段的產(chǎn)生原因有很多,可以以此進行分類。

2.1 _id、__v字段

產(chǎn)生原因:以mongoose為例,通過schema->model->entity向mongodb中插入數(shù)據(jù)時,該數(shù)據(jù)會默認的增加_id、__v字段。

_id字段是由mongodb默認生成的,用于文檔的唯一索引。類型是ObjectID。mongoDB文檔定義如下:


MongoDB creates a unique index on the _id field during the creation of a collection. The _id index prevents clients from inserting two documents with the same value for the _id field. You cannot drop this index on the _id field.

__v字段是由mongoose首次創(chuàng)建時默認生成,表示該條doc的內(nèi)部版本號。


The versionKey is a property set on each document when first created by Mongoose. This keys value contains the internal revision of the document. The versionKey option is a string that represents the path to use for versioning. The default is __v.

2.2 createdAt、updatedAt字段

createdAt、updatedAt字段是通過timestamp選項指定的,類型為Date。


The timestamps option tells mongoose to assign createdAt and updatedAt fields to your schema. The type assigned is Date.By default, the names of the fields are createdAt and updatedAt. Customize the field names by setting timestamps.createdAt and timestamps.updatedAt.

2.3 is_deleted字段

is_deleted字段是實現(xiàn)軟刪除一種常用的方式。在實際業(yè)務(wù)中,出于各種原因(如刪除后用戶要求再次恢復(fù)等),往往采用的軟刪除,而非物理刪除。

因此,is_deleted字段保存當(dāng)前doc的狀態(tài)。is_deleted字段為true時,表示當(dāng)前記錄有效。is_deleted字段為false時,表示當(dāng)前記錄已被刪除。

3 額外字段相關(guān)操作

3.1 額外字段生成

_id字段是必選項;__v、createdAt、updatedAt字段是可配置的;status字段直接加在s對應(yīng)的chema中。相關(guān)的schema代碼如下:

isdeleted: {
 type: String,
 default:true,
 enum: [true, false],
},
id: {
 type: String,
 index: true,
 unqiue: true,
 default:uuid.v4(),
}},
{timestamps:{createdAt:'docCreatedAt',updatedAt:"docUpdatedAt"},versionKey:false});

通過配置schema中的timestamps選項,可以將createdAt和updatedAt字段加入到doc中。在創(chuàng)建和更新doc時,這兩個字段無需傳入,就會自動變化。

3.2 額外字段清理

通過3.1可以明確的產(chǎn)生若干額外字段,但是客戶端調(diào)用接口并返回時,這些字段是無需得知的。因此需對額外字段進行清理。清理方式分為投影和過濾。

以query、update接口為例。其中query接口用于:1、查詢指定字段 2、查詢?nèi)孔侄?3、分頁排序查詢。update接口用于更新并返回更新后的數(shù)據(jù)。

根據(jù)是否需要指定字段、和collection中有無內(nèi)嵌的情況劃分,一共有4類。接著針對這4種情況進行分析。

1、有指定字段、無內(nèi)嵌

2、無指定字段、無內(nèi)嵌

3、有指定字段、有內(nèi)嵌

4、無指定字段、有內(nèi)嵌

3.2.1 投影

有指定字段是指在查詢時指定查詢字段,而無需全部返回。mongo中實現(xiàn)指定的方式是投影 (project) 。mongo官方文檔中定義如下:


The $project takes a document that can specify the inclusion of fields, the suppression of the _id field, the addition of new fields, and the resetting of the values of existing fields. Alternatively, you may specify the exclusion of fields.

$project可以做3件事:

1.指定包含的字段、禁止_id字段、添加新字段

2.重置已存在字段的值

3.指定排除的字段

我們只需關(guān)注事情1、事情3。接著查看mongoose中對project的說明:


When using string syntax, prefixing a path with - will flag that path as excluded. When a path does not have the - prefix, it is included. Lastly, if a path is prefixed with +, it forces inclusion of the path, which is useful for paths excluded at the schema level.

A projection must be either inclusive or exclusive. In other words, you must either list the fields to include (which excludes all others), or list the fields to exclude (which implies all other fields are included). The _id field is the only exception because MongoDB includes it by default.

注意:此處指query "projection"

mongoose表明:投影要么是全包含,要么是全剔除。不允許包含和剔除同時存在。但由于

_id是MongoDB默認包含的,因此_id是個例外。

select project投影語句組裝代碼:

 /**
 * 添加通用篩選條件
 * @param {*} stat 已裝配的篩選語句 
 * @param {*} collection collectionName
 * @return {*} 組裝完成的語句
 */
 function addCommonSelectCond(stat,collection)
 {
 if(typeof(stat)!="object") return;

 stat["_id"] = 0;
 stat["__v"] = 0;
 stat["status"] = 0;
 stat["docCreatedAt"] = 0;
 stat["docUpdatedAt"] = 0;

 var embeddedRes = hasEmbedded(collection);
 if(embeddedRes["isEmbedded"])
 {
 for(var item of embeddedRes["embeddedSchema"])
 {
 stat[item+"._id"] = 0;
 stat[item+".__v"] = 0;
 stat[item+".status"] = 0;
 stat[item+".docCreatedAt"] = 0; 
 stat[item+".docUpdatedAt"] = 0; 
 }
 }
 return stat;
 }

3.2.2 過濾

通過findOneAndupdate、insert、query等返回的doc對象中(已經(jīng)過lean或者toObject處理),是數(shù)據(jù)庫中真實狀態(tài)。因此需要對產(chǎn)生的doc進行過濾,包括doc過濾和內(nèi)嵌文檔過濾。

/**
 * 處理自身及內(nèi)嵌的表
 * @param {*} collection 查詢的表
 * @param {*} doc 已查詢出的結(jié)果
 * @returns doc 清理后的結(jié)果
 */
static clearDoc(collection,doc){
 if(doc === undefined || doc === null || typeof doc != "object" ) return null;
 doc = this.clearExtraField(doc);

 var res = hasEmbedded(collection);
 if(res["isEmbedded"])
 {
 let arr = res["embeddedSchema"];
 for(var item of arr){
 if(doc[item])
 doc[item] = this.clearArray(doc[item]);
 }
 }
 return doc;
}

static clearExtraField(doc){
 if(doc === null || typeof doc != "object")
 return;
 
 var del = delete doc["docCreatedAt"]
 delete doc["docUpdatedAt"]
 delete doc["_id"]
 delete doc["__v"]
 delete doc["status"];
 if(!del) return new Error("刪除額外字段出錯");

 return doc;
}

static clearArray(arr)
{
 if(!Array.isArray(arr)) return;

 var clearRes = new Array();
 for(var item of arr){
 clearRes.push(this.clearExtraField(item));
 }
 return clearRes;
}

細心的讀者已經(jīng)發(fā)現(xiàn)了,投影和過濾的字段內(nèi)容都是額外字段。那什么情況下使用投影,什么情況下使用過濾呢?

關(guān)于這個問題,筆者的建議是如果不能確保額外字段被剔除掉,那就采取雙重認證:查詢前使用投影,查詢后使用過濾。

4 總結(jié)

本文介紹了實際業(yè)務(wù)中往往會產(chǎn)生額外字段。而在mongoDB中,"消除"額外字段的手段主要是投影、過濾。

以使用頻率最高的查詢接口為例,整理如下:

指定選項 內(nèi)嵌選項 查詢前投影 查詢后過濾
有指定 無內(nèi)嵌 ×
有指定 有內(nèi)嵌 ×
無指定 無內(nèi)嵌 ×
無指定 有內(nèi)嵌 ×

因此,筆者建議無論schema中是否配置了options,在查詢時組裝投影語句,查詢后進行結(jié)果過濾。這樣保證萬無一失,

額外字段才不會漏到客戶端**。

到此這篇關(guān)于mongoDB使用投影剔除‘額外'字段的文章就介紹到這了,更多相關(guān)mongoDB用投影剔除額外字段內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

標(biāo)簽:菏澤 安順 黃石 呼倫貝爾 楚雄 池州 白山 舟山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mongoDB使用投影剔除‘額外’字段的操作過程》,本文關(guān)鍵詞  mongoDB,使用,投影,剔除,額外,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mongoDB使用投影剔除‘額外’字段的操作過程》相關(guān)的同類信息!
  • 本頁收集關(guān)于mongoDB使用投影剔除‘額外’字段的操作過程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲黄色在线看| 国产精品99久久久久久久vr| 亚洲人在线播放| 中文字幕视频在线| 亚洲欧洲性图库| 亚洲成人99| 日韩亚洲在线观看| 91在线不卡| 看黄网站在线| 最近免费中文字幕中文高清百度| 国产精品日韩| 先锋影视中文字幕| 在线免费观看羞羞视频一区二区| 久久久一本二本三本| 日本不卡视频在线播放| www.激情网| 亚洲二区在线观看| 波多野结衣av在线免费观看| 国产精品一级伦理| 欧美久久久久久蜜桃| 国产精品一卡二卡三卡| 亚洲精品ww久久久久久p站| 少女频道在线观看免费播放电视剧| 噜噜噜狠狠夜夜躁精品仙踪林| 一区二区三区www污污污网站| 影音先锋中文在线视频| 欧美美女性视频| 肉体视频在线| 91嫩草国产丨精品入口麻豆| 欧美男人操女人视频| 国产亚洲aⅴaaaaaa毛片| 嫩草影院国产精品| a级大胆欧美人体大胆666| 精品人妻aV中文字幕乱码色欲| 欧美在线视频全部完| 久久精品国产第一区二区三区| 国产综合久久久久| 国产精品美女免费看| 成年人视频免费在线观看| 日韩免费毛片| 黄色亚洲大片免费在线观看| 成人短片线上看| 日韩欧美亚洲国产精品字幕久久久| 亚洲第一香蕉视频| 亚洲激情在线视频| 992tv快乐视频| 日韩免费高清av| 91亚洲va在线va天堂va国| 精产国品一区二区| 久久亚洲国产成人精品性色| 91久久中文| 91美剧网在线播放| 精品免费在线| 中文字幕日韩欧美一区二区三区| jizz老师| 国产精品手机在线播放| 熟女熟妇伦久久影院毛片一区二区| 欧洲金发美女大战黑人| 欧洲成人午夜精品无码区久久| julia一区二区三区中文字幕| 国产成人一区二区三区小说| 中文字幕av一区中文字幕天堂| 久热精品在线| 国产精成人品免费观看| 欧美一区视久久| 中日韩一区二区三区| 好男人中文字幕官网| 亚洲综合免费观看高清完整版在线| 国产性猛交普通话对白| 正义之心1992免费观看全集完整版| 精品人妻一区二区色欲产成人| 男人天堂综合| 在线观看av的网站| h片在线观看网站| 黄色一级视频网站| 免费观看的毛片| www.4hu95.com四虎| 女人高潮被爽到呻吟在线观看| 国产精品啪啪啪视频| 成人国产精品免费视频| 一区二区三区 在线观看视| 四虎成人永久地址| 91视频你懂的| 91精品国产99久久久久久红楼| 成年片费网站色大全免费视频| 久久久久亚洲AV成人无在| 精品欧美一区二区精品少妇| 丰满少妇又爽又紧又丰满69| 亚洲少妇最新在线视频| 九九热精品在线播放| 貂蝉被到爽流白浆在线观看| 成人小视频在线| 国产美女视频一区二区二三区| 夜夜操免费视频| 国产在线视频欧美一区| 日本在线中文字幕一区| 在线免费观看a级片| 丰满岳乱妇dvd日本| 日韩av福利| 欧美高清在线播放| 久久久久久久久久久网| 国产成人精品亚洲午夜麻豆| www天堂在线观看| 欧美激情视频在线播放| 韩日中文字幕| 欧美最猛性xxxxx免费| 国产精品免费观看高清| 97超碰资源站| 91在线观看免费观看| 999久久久久久久久6666| 精品国产免费久久久久久尖叫| 九九这里只精品视在线99| 黄网站免费观看| 欧美一级专区免费大片| 在线综合视频网站| 超碰免费在线观看| 中文字幕被公侵犯的漂亮人妻| 一个人看的www日本高清视频| 精品女人久久久| 无码精品视频一区二区三区| 国产精品亚洲欧美导航| 欧美激情精品久久久久久黑人| 日韩性生活视频| 久久免费在线观看| 亚洲成人影院少妇| 国产在线资源| www.欧美亚洲| 高h震动喷水双性1v1| 国产精品久久久久久久久久久不卡| 日韩欧美国产一二三区| 久久九九热re6这里有精品| 日韩精品一二| 久久综合九色欧美狠狠| 精品视频1区2区3区| 日本二三区不卡| 亚洲第一主播视频| 996这里只有精品| 在线视频精品免费| 风间由美久久久| 国产a国产a国产a| 国产中文字幕网| 亚洲精品在线三区| 男人和女人啪啪网站| 国产精品yjizz视频网一二区| 亚洲第一av色| seba5欧美综合另类| 欧美黄色一区二区三区| 成年人在线播放| 国产一区二区精品久久91| 国产精品久久一级| 亚洲性生活视频在线观看| 六月婷婷综合网| xxxxwwww在线免费观看| 亚洲少妇诱惑| 不卡中文字幕在线观看| 国内精品久久久久影院色| 中文字幕在线观看1| 91av日本| 一区二区三区电影| 国产喂奶挤奶一区二区三区| 亚洲国产精品123| 欧美视频一区二| 亚洲成av人电影| 国产孕妇孕交大片孕| 天堂在线观看av| youjizz.com亚洲| 中文字幕乱码一区二区免费| 国产精品久久久久久福利一牛影视| 97精品一区二区视频在线观看| 91福利精品第一导航| 国产精品一区在线| 黄色在线视频网址| 国产精品密蕾丝视频下载| 最新免费av网址| 欧美日韩另类在线| 美女脱光内衣内裤视频久久影院| 国偷自产av一区二区三区麻豆| v天堂中文在线| 亚洲熟妇国产熟妇肥婆| 男人j桶女人的网站| 久久精品www人人爽人人| 一二美女精品欧洲| 午夜激情影院在线观看| 天堂精品久久久久| 国产午夜精品免费一区二区三区| 精品处破学生在线二十三| 向日葵视频成人app网址| 亚洲成人av在线影院| 传媒在线观看| 国产美女免费无遮挡| 91在线观看欧美日韩| 肉大捧一出免费观看网站在线播放| 色婷婷av一区二区| 一本久久青青| 色婷婷亚洲mv天堂mv在影片| 久久久噜噜噜久久久| 亚洲电影第1页| 中文字幕第三区| 久久久久久9| 国产91av在线播放| 黄色片在线观看免费| 黄色美女一级片| 亚洲男女视频在线观看| 色综合久久久久久久| 欧美精品三级| 亚洲成人免费视| 精品国产一区二区三区久久久久久| 欧美日韩第一区| 国产精品久久久免费| 免费试看一区| 成人影院免费观看| 日本一二三不卡视频| 久久久久中文字幕亚洲精品| 国产一区不卡| 国模无码视频一区二区三区| 久久香蕉国产线看观看网| 8x8ⅹ国产精品一区二区二区| 青青草99啪国产免费| 97在线免费| 九义人在线观看完整免费版电视剧| 国产麻豆精品95视频| 99riav一区二区三区| 国产又粗又长又爽又黄的视频| 欧美另类高清zo欧美| 亚洲日本japanese丝袜| 91精品在线看| 亚洲国产中文字幕在线视频综合| 在线区一区二视频| 91综合久久| 亚洲精品乱码日韩| 2018av男人天堂| 天天爱天天操天天干| 九九热最新视频| 成年网站在线| 欧美videos另类齐全| 亚洲第一天堂无码专区| 欧美日韩精品二区| 日本国产在线视频| 亚洲一区二区毛片| 一级黄色在线| 国产黄色大片免费看| 亚洲免费观看在线观看| 人妻在线日韩免费视频| 特级西西444www大精品视频| 97一区二区国产好的精华液| 免费成人av在线播放| 理论视频在线观看| 亚洲综合精品自拍| 在线看av网址| 白嫩少妇丰满一区二区| 亚洲午夜私人影院| 一区二区不卡在线视频 午夜欧美不卡在| 国产精品九九九九| 777丰满影院| 欧洲有码在线视频| 色老太综合网| 亚洲自拍偷拍色图| 欧美日韩一级片在线观看| 69国产精品成人在线播放| 99在线高清视频在线播放| 欧美在线国产| 免费电影网站在线观看| 91福利电影| 欧美一区二区三区四区久久| 成人一区在线看| 亚州国产精品| 偷拍自拍在线看| 牛人国产偷窥女洗浴在线观看| 亚洲综合欧美综合| 国产在线精品一区二区三区| 在线一区二区三区| 性欧美猛交videos| 精品久久国产字幕高潮| 免费男女羞羞的视频网站中文字幕| 国产精品亚洲不卡a| 亚洲自拍的二区三区| 国产三级理论片| 亚洲乱码国产乱码精品| 免费在线看黄色| 日韩精品在线观看一区| 亚洲大尺度视频在线观看| 中文字幕精品一区久久久久| 国产一级免费看| 美女少妇全过程你懂的久久| 国产欧美在线观看一区| 国产精品99免费看| 免费在线看黄| 国产日韩欧美精品在线观看| 五月天欧美精品| 中文字幕在线网| 少妇激情综合网| 伊人久久视频| 黄色小视网站| 精品国产一区二区三区2021| 中文字幕一区二区三区av| 亚洲人挤奶视频| 精品在线播放视频| 国产免费裸体视频| 国外成人在线直播| 欧美一二三四在线| 欧美亚洲国产成人| 毛片网站免费观看| jlzzjizz在线播放观看| 国产精品影视天天线| 97超碰人人在线| 91精品久久久久久久久久| 大香伊人久久| 日本黄色大片视频| 老色鬼在线视频| 中文字幕乱码久久午夜不卡| 日本丰满少妇黄大片在线观看| 6—12呦国产精品| 午夜a成v人精品| 国产一区二区三区四| 亚洲国产精品毛片| 国产成人无码一区二区在线观看| 色综合一个色综合亚洲| 亚洲欧美成人在线| 蜜臀精品一区二区三区在线观看| 亚洲不卡av一区二区三区| 国产精品久久久久久69| 真实新婚偷拍xxxxx| 国产免费一区二区三区香蕉精| 超碰97人人做人人爱少妇| 欧美 日韩 国产 高清| 久久免费看视频| 国产精品国产自产拍高清av| 小小影院久久|