go mongodb排序查詢_《MongoDB》day two

  1. Mongodb的更新方式有?
  2. db.集合名.update() 函數:用于更新已存在的文檔。

語法格式:db.COLLECTION_NAME.update({查詢條件},{更新內容},{更新參數(可選)})

注:這種方式會覆蓋原有的文檔。

  1. 使用更新操作符
  2. 使用 save()函數更新文檔
  3. Mongodb的update更新?

db.集合名.update({key:“value”},{key:“value”})

  1. Mongodb的更新操作符有哪些 都是什么意思?

$set:更新文檔(只更新指定鍵,不會覆蓋整個文檔),若該鍵不存在,會自動創建,并插入數據

$unset:刪除指定鍵

$push:向文檔的某個數組類型的鍵添加一個數組元素,不過濾重復的數據。添 加時鍵存在,要求鍵值類型必須是數組;鍵不存在,則創建數組類型的鍵

$inc:對文檔的某個值為數字型(只能為滿足要求的數字)的鍵進行增減的操作。

$pop 操作符:刪除數據元素,給定值1表示從數組尾部刪除,-1表示從數組頭部刪除。

$pull 操作符:從數組中刪除滿足條件的元素

$pullAll 操作符:從數組中刪除滿足條件的多個元素

$rename 操作符:對鍵進行重新命名。

  1. Mongodb的save()更新?

save() 方法通過傳入的文檔來替換已有文檔。

語法格式:db.集合名.save({文檔})

  1. Mongodb刪除文檔的三種方式?
  2. remove()函數

使用 remove()函數可刪除集合中的指定文檔。

語法格式:remove({指定刪除條件},刪除參數(可選參數))

如果使用的條件在集合中可以匹配多條數據,那么 remove()函數會刪除所有滿足條件的 數據。我們可以在 remove 函數中給定 justOne,表示只刪除第一條,在 remove 函數中給定

注意:remove() 方法 并不會真正釋放空間。需要繼續執行 db.repairDatabase() 來回收 磁盤空間 參數 1 即可。

2. deleteOne()函數

deleteOne()函數是官方推薦刪除文檔的方法。該方法只刪除滿足條件的第一條文檔。

3.deleteMany()函數

deleteMany 函數是官方推薦的刪除方法。該方法刪除滿足條件的所有數據。 再次插入兩條測試數據

刪除集合中的所有文檔 1.remove({}) 、2.deleteMany({})

  1. Mongodb如何實對文檔的查詢,請舉例說明?

1 find()函數

在 MongoDB 中可以使用 find()函數查詢文檔。

語法格式為:find({查詢條件(可選)},{指定投影的鍵(可選)}) 如果未給定參數則表示查詢所有數據。

pretty()函數可以使用格式化的方式來顯示所有文檔。

2 findOne()函數

findOne()函數只返回滿足條件的第一條數據。如果未做投影操作該方法則自帶格式化功 能。

語法格式:findOne({查詢條件(可選)},{投影操作(可選)})

3 模糊查詢

在 MongoDB 中可以通過//與^ 、$實現模糊查詢,注意使用模糊查詢時查詢條件不能放到 雙引號或單引號中。使用^表示起始位置,使用$表示結尾位置。

  1. Mongodb中的投影操作指的是?

在 find 函數中我們可以指定投影鍵。

語法格式為:find({查詢條件},{投影鍵名:1(顯示該列)|0(不顯示該列),投影鍵名:1|0,......})

_id 列默認為顯示列。如果不顯示_id 可在投影中通過 0 過濾

  1. 條件運算符有哪些 分別什么意思?

$gt:大于指定條件,用于數字或日期運算

$lt:小于指定條件,用于數字或日期運算

2fc0fb1e7590ae3f30788d544cbdedd8.png

$gte:大于等于指定條件,用于數字或日期運算

$lte:小于等于指定條件,用于數字或日期運算

866319a614151ec859e64b1aa2f5c7fe.png

$eq:等于指定條件,用于數字或日期運算

$ne:不等于指定條件,用于數字或日期運算

86a9bde1e9a9a7f4f8596769738061b8.png

$and:表示多條件間的并且關系

語法格式為:find({$and:[{條件一},{,條件二},.......]})

e537739b68227af5490c1e217a109753.png

注意:這種方式只能當參與判斷的條件key相同時使用

4d1c3f35a15e7ba8c5054e2f06f72c0b.png

$or:表示多條件間的或者關系。

語法格式為:find({$or:[{條件一},{條件二},.....]})

85bc2f21c5eb228ec67c076ed0580fea.png

8.1and和or如何聯合使用?

查詢 title 為 test5 并且 size 等于 500,或者 size 小于 400 的文檔。

123bc99580b8168b6691b520ff1dd009.png

$type:根據value的類型查詢

562b02c8f178b98fd2e7d0171d2c8256.png
  1. 每頁顯示5條查看第5頁的數據如何實現?

limit函數:使用 MongoDB 的 Limit 函數, limit()函數接受一個數字參數,該參數指定從 MongoDB 中讀取的記錄條數。

語法格式:db.COLLECTION_NAME.find().limit(NUMBER)

a35dc5fb85d7e345fe5412b7d8031507.png

skip函數:使用 skip()函數來跳過 指定數量的數據,skip 函數同樣接受一個數字參數作為跳過的記錄條數。

語法格式:db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

13441cd428a8a35c57cefa35265c18e0.png

實現分頁顯示第五頁數據,每頁五條:

db.dev.find({},{title:1,_id:0}).skip(25).limit(5)

注意:我們可以使用 skip 函數與 limit 函數實現 MongoDB 的分頁查詢,但是官方并不推薦這 樣做,因為會掃描全部文檔然后在返回結果,效率過低。

  1. 如何實現排序,兩個條件如何排序 如年齡一致按照分數排序?

在 MongoDB 中使用 sort() 函數對查詢到的文檔進行排序,sort() 函數可以通過參數 指定排序的字段,并使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而 -1 是用于 降序排列。

語法格式:db.COLLECTION_NAME.find().sort({排序鍵:1})

f94052daa94de7789574f47c42c5558b.png
  1. 如何創建索引?

在 MongoDB 中會自動為文檔中的_Id(文檔的主鍵)鍵創建索引,與關系型數據的主鍵索 引類似。 我們可以使用 createIndex()函數來為其他的鍵創建索引。在創建索引時需要指定排序規 則。1 按照升序規則創建索引,-1 按照降序規則創建索引。 在創建索引時,需要使用具有 dbAdmin 或者 dbAdminAnyDatabase 角色的用戶。

語法格式:db.COLLECTION_NAME.createIndex({創建索引的鍵:排序規則,......},{創建索 引的參數(可選參數)})

f7e55c0a91f16158eaa9c9955dae939d.png

cdfab05b901a011d69771c2a15a6ffb7.png
  1. 如何查看索引?

通過 getIndexes()或者 getIndexSpecs()函數查看集合中的所有索引信息。

語法格式:db.COLLECTION_NAME.getIndexes()

191017075abeac53092a2cf580301210.png

語法格式:db.COLLECTION_NAME.getIndexSpecs()

83bbfe2252f3c8836bfbe25ef1fadf22.png

使用db.集合名.getIndexKeys()查看集合中的索引鍵

8c602950fcc1e2fbf4c04ad79539eb93.png

查看索引大小:

我們可以通過 totalIndexSize()函數來查看當前集合中索引的大小,單位為字節。

語法格式:db.COLLECTION_NAME.totalIndexSize([detail](可選參數)) 參數解釋:detail 可選參數,傳入除 0 或 false 外的任意數據,那么會顯示該集合中每個 索引的大小及集合中索引的總大小。如果傳入 0 或 false 則只顯示該集合中所有索引的總大 小。默認值為 false。

551fdacda0f701f146e43f40c6a08f4c.png
  1. 刪除索引有幾種方式,分別舉例說明?

1. 刪除集合中的指定索引

通過 dropIndex()函數來刪除指定索引。

語法格式:db.COLLECTION_NAME.dropIndex("索引名稱")。

ccc138ccab0ff0a1874fd5034a98f961.png

2. 刪除集合中的全部索引

使用 dropIndexes()函數刪除集合中的全部索引,_id 鍵的索引除外。

語法格式:db.COLLECTION_NAME.dropIndexes()

cb16f0bfd99b62a06d5401367842724f.png

注意:_id索引不會被刪除掉

3.重建索引

我可以使用 reIndex()函數重建索引。重建索引可以減少索引存儲空間,減少索引碎片, 優化索引查詢效率。一般在數據大量變化后,會使用重建索引來提升索引性能。重建索引是 刪除原索引重新創建的過程,不建議反復使用。

語法格式:db.COLLECTION_NAME.reIndex()

  1. 索引類型有哪些,有何作用?

1.單字段索引(Single Field Index)

所謂單字段索引是指在索引中只包含了一個鍵。查詢時,可加速對該字段的各種查詢請 求,是最常見的索引形式。MongoDB 默認創建的_Id 索引也是這種類型。我們可以使用 createIndexes({索引鍵:排序規則})函數來創建單字段索引

語法格式:db.COLLECTION_NAME.createIndexes({索引鍵名:排序規則})

2 交叉索引

所謂交叉索引就是為一個集合的多個字段分別建立索引,在查詢的時候通過多個字段作 為查詢條件,這種情況稱為交叉索引。 在查詢文檔時,在查詢條件中包含一個交叉索引鍵或者在一次查詢中使用多個交叉索引 鍵作為查詢條件都會觸發交叉索引。

3 復合索引(Compound Index)

復合索引是 Single Field Index 的升級版本,它針對多個字段聯合創建索引,先按第一個 字段排序,第一個字段相同的文檔按第二個字段排序,依次類推。 語法格式:db.COLLECTION_NAME.createIndex({索引鍵名:排序規則, 索引鍵名:排序規 則,......}); 復合索引能滿足的查詢場景比單字段索引更豐富,不光能滿足多個字段組合起來的查 詢,也能滿足所以能匹配符合索引前綴的查詢。

4 多 key 索引 (Multikey Index)

當索引的字段為數組時,創建出的索引稱為多 key 索引,多 key 索引會為數組的每個元 素建立一條索引。

語法格式:db.COLLECTION_NAME.createIndex({數組鍵名:排序規則});

5. 唯一索引 (unique index)

唯一索引會保證索引對應的鍵不會出現相同的值,比如_id 索引就是唯一索引

語法格式:db.COLLECTION_NAME.createIndex({索引鍵名:排序規則},{unique:true}) 如果唯一索引所在字段有重復數據寫入時,拋出異常。

6.部分索引 (partial index):

部分索引是只針對符合某個特定條件的文檔建立索引,3.2 版本才支持該特性。 MongoDB 部分索引只為那些在一個集合中,滿足指定的篩選條件的文檔創建索引。由 于部分索引是一個集合文檔的一個子集,因此部分索引具有較低的存儲需求,并降低了索引 創建和維護的性能成本。部分索引通過指定過濾條件來創建,可以為 MongoDB 支持的所有 索引類型使用部分索引。 簡單點說:部分索引就是帶有過濾條件的索引,即索引只存在與某些文檔之上

語 法 格 式 : db.COLLECTION_NAME.createIndex({ 索引鍵名: 排 序 規 則},{partialFilterExpression:{鍵名:{匹配條件:條件值}}})

注意:部分索引只為集合中那些滿足指定的篩選條件的文檔創建索引。如果你指定的 partialFilterExpression 和唯一約束、那么唯一性約束只適用于滿足篩選條件的文檔。具有唯 一約束的部分索引不會阻止不符合唯一約束且不符合過濾條件的文檔的插入

  1. 使用索引需要注意什么?

1.建立合適的索引

為每一個常用查詢結構建立合適的索引。 復合索引是創建的索引由多個字段組成,例如: db.test.createIndex({"username":1, "age":-1}) 交叉索引是每個字段單獨建立索引,但是在查詢的時候組合查找,例如: db.test.createIndex({"username":1}) db.test.createIndex({"age":-1}) db.test.find({"username":"kaka", "age": 30}) 交叉索引的查詢效率較低,在使用時,當查詢使用到多個字段的時候,盡量使用復合索 引,而不是交叉索引

2 復合索引的字段排列順序

當我們的組合索引內容包含匹配條件以及范圍條件的時候,比如包含用戶名(匹配條件)

以及年齡(范圍條件),那么匹配條件應該放在范圍條件之前。

3.查詢時盡可能僅查詢出索引字段

有時候僅需要查詢少部分的字段內容,而且這部分內容剛好都建立了索引,那么盡可能 只查詢出這些索引內容,需要用到的字段顯式聲明(_id 字段需要顯式忽略!)。因為這些 數據需要把原始數據文檔從磁盤讀入內存,造成一定的損耗

4.對現有的數據大表建立索引的時候,采用后臺運行方式

在對數據集合建立索引的過程中,數據庫會停止該集合的所有讀寫操作,因此如果建立 索引的數據量大,建立過程慢的情況下,建議采用后臺運行的方式,避免影響正常業務流程。

  1. 索引限制指的是?

1.額外開銷

每個索引占據一定的存儲空間,在進行插入,更新和刪除操作時也需要對索引進行操作。 所以,如果你很少對集合進行讀取操作,建議不使用索引。

2 內存使用

由于索引是存儲在內存(RAM)中,你應該確保該索引的大小不超過內存的限制。 如果索引的大小大于內存的限制,MongoDB 會刪除一些索引,這將導致性能下降。

3 查詢限制

索引不能被以下的查詢使用: 正則表達式(最左匹配除外)及非操作符,如 $nin, $not, 等。 算術運算符,如 $mod, 等。 所以,檢測你的語句是否使用索引是一個好的習慣,可以用 explain 來查看。

4 最大范圍

集合中索引不能超過 64 個 索引名的長度不能超過 128 個字符 一個復合索引最多可以有 31 個字段

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455067.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455067.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455067.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【轉】 JMeter學習(二十四)linux啟動jmeter,執行./jmeter.sh報錯解決方法

1.l-bash: ./jmeter.sh: Permission denied解決辦法:jmeter.sh的執行權限改改,是權限不夠chmod 777 jmeter.sh2.An error occurred:No X11 DISPLAY variable was set, but this program performed an operation which requires it.步驟一:Lin…

哈希表思路圖解和代碼實現

原文鏈接傳送門 哈希表(散列)-Google上機題 看一個實際需求,google公司的一個上機題: 有一個公司,當有新的員工來報道時,要求將該員工的信息加入(id,性別,年齡,住址…),當輸入該員工的id時,要求查找到該員工的 所有信息. 要求: 不使用數據庫,盡量節省內存,速度越…

android開發學習——Mina框架

Apache Mina Server 是一個網絡通信應用框架,對socket進行了封裝。 http://www.cnblogs.com/moonandstar08/p/5475766.html http://blog.csdn.net/u010739551/article/details/47361365 http://www.cnblogs.com/yanghuiping/p/4108063.html (mina 自定…

glibc交叉編譯_TSN之linuxptp交叉編譯

0 開發環境1 linuxptp是什么2 為什么要交叉編譯linuxptp3 修改makefile4 修改源碼5 交叉編譯0 開發環境筆記本:ubuntu18.04.5,內核版本為5.3 開發板:imx8mp-evk內核版本:Linux5.4.24交叉編譯工具鏈:fsl-imx-xwayland-g…

230. Kth Smallest Element in a BST

題目: Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Note: You may assume k is always valid, 1 ≤ k ≤ BSTs total elements. Follow up:What if the BST is modified (insert/delete operations) often …

聲音編碼

1.脈沖編碼調制PCM文件格式簡介 將音頻數字化,其實就是將聲音數字化。最常見的方式是透過脈沖編碼調制PCM(Pulse Code Modulation) 。運作原理如下。首先我們考慮聲音經過麥克風,轉換成一連串電壓變化的信號,如圖一所示。這張圖的橫座標為秒&…

Elastic Stack簡介

Elastic Stack簡介 如果你沒有聽說過Elastic Stack,那你一定聽說過ELK,實際上ELK是三款軟件的簡稱,分別是Elasticsearch、 Logstash、Kibana組成,在發展的過程中,又有新成員Beats的加入,所以就形成了Elast…

webpack v3 結合 react-router v4 做 dynamic import — 按需加載(懶加載)

為什么要做dynamic import? dynamic import不知道為什么有很多叫法,什么按需加載,懶加載,Code Splitting,代碼分頁等。總之,就是在SPA,把JS代碼分成N個頁面份數的文件,不在用戶剛進來…

go kegg_工具篇丨GO和KEGG富集不到通路?快試試這個超贊的功能分析工具吧

GO和KEGG富集分析是我們在篩選出差異表達基因之后,都會去做的套路性分析。然鵝……我相信,總有那么一些“倒霉孩子”會遇到跟我一樣的窘境吧,好不容易篩選出來的差異基因,嘗試了DAVID(https://david.ncifcrf.gov/)、Metascape(htt…

大齡程序員的未來在何方

來源:http://www.gad.qq.com//article/detail/30358?sessionUserTypeBFT.PARAMS.229862.TASKID&ADUIN114328649&ADSESSION1501026740&ADTAGCLIENT.QQ.5533_.0&ADPUBNO26719 作者:foruok 大家都對大齡技術人員的未來非常關心&#xff0c…

搭建Telnet服務器

搭建Telnet服務器 作者:尹正杰 版權聲明:原創作品,謝絕轉載!否則將追究法律責任。 可能大家都知道現在已經很少有人用TELNET服務器, 因為它傳輸數據是以明文的方式,我們很容易通過抓包軟件講數據進行抓包&a…

table取tr對象 vue_Vue筆記

Vue集成了React和Angular的優點,摒棄了他們的缺點。Vue的官網:https://cn.vuejs.org/v2/api/Vue誕生于2016年,是現在非常流行的MVVM框架。Vue提供了“引包”的使用方法,初學者可以在這之下學習語法。不需要webpack,不需…

Beats入門簡介

使用Beat收集nginx日志和指標數據 項目需求 Nginx是一款非常優秀的web服務器,往往nginx服務會作為項目的訪問入口,那么,nginx的性能保障就變得非常重要了,如果nginx的運行出現了問題就會對項目有較大的影響,所以&…

PHP-curl

//初始化$curl curl_init();//設置抓取的urlcurl_setopt($curl, CURLOPT_URL, http://www.baidu.com);//設置頭文件的信息作為數據流輸出curl_setopt($curl, CURLOPT_HEADER, 1);//設置獲取的信息以文件流的形式返回,而不是直接輸出。curl_setopt($curl, CURLOPT_R…

MPlayer開發

一、介紹 不論是音頻數據還是視頻數據,我都為MPlayer項目開發過一些開源的解碼器。因此我個人認為我有資格寫一篇文檔來介紹如何開發新的編解碼器。 學習如何添加一個新的編解碼器的最好方法通常是學習大量的已有代碼。本文檔僅僅是對代碼的一個補充&#x…

可編程led燈帶原理_SCPSD-250-04-27派克真空壓力傳感器故障和工作原理

SCPSD-250-04-27派克PARKER真空壓力傳感器故障和工作原理PARKER壓力開關現貨 PARKER壓力傳感器特價 派克真空壓力傳感器 PARKER數字壓力開關2020年還剩最后2天了,這一年大家都過得不太容易,尤其是我自己這是30年以來過得最艱難的一年,經…

總結面試時沒有回答上的內存對齊問題

前兩天面試某公司時,沒有回答上的一個問題,總結如下,以供參考。 問:下面這個結構類型的實例變量占用多少內存: struct struct1 { int i; short j; char c; }; 我反問:是啥語言啥機器啥編譯環境…

Kibana入門安裝與介紹

Kibana入門 Kibana 是一款開源的數據分析和可視化平臺,它是 Elastic Stack 成員之一,設計用于和 Elasticsearch 協作。您可以使用 Kibana 對 Elasticsearch 索引中的數據進行搜索、查看、交互操作。您可以很方便的利用圖表、表格及地圖對數據進行多元化…

友善串口工具接收數據隨機換行_使用Python3+PyQT5+Pyserial 實現簡單的串口工具方法...

練手項目,先上圖先實現一個簡單的串口工具,為之后的上位機做準備代碼如下:pyserial_demo.pyimport sys import serial import serial.tools.list_ports from PyQt5 import QtWidgets from PyQt5.QtWidgets import QMessageBox from PyQt5.QtC…

Vue渲染函數

前面的話 Vue 推薦在絕大多數情況下使用 template 來創建HTML。然而在一些場景中,真的需要 JavaScript 的完全編程的能力,這就是 render 函數,它比 template 更接近編譯器。本文將詳細介紹Vue渲染函數 引入 下面是一個例子,如果要…