摘要:學習已經有三周了,是時候來一發學習總結啦。相關簡介是非關系型的數據庫。簡單在于,所有的都由大括號,中括號,以及對構成。不同于,它是同步的。
學習mongoDB已經有三周了,是時候來一發學習總結啦。以下是個人學習心得總結,非官方,可能有紕漏和不準確之處,歡迎指正。
1.mongoDB是非關系型(nosql)的數據庫。
2.mongoDB是無模式(schemaless)的數據庫,每個文檔都有他自己的模式。
3.mongoDB是面向集合(collection)的數據庫,它集成高擴展性和高性能于一身。
4.mongoDB不存在collection和collection之間 的join和transaction操作。
5.mongoDB通過mongo Shell展示給用戶的數據格式是JSON,存儲在mongoDB中的格式是BSON(JSON 的二進制格式),正是這種二進制存儲方式更加提升了數據庫的性能。
6.JSON是簡單和復雜的結合體。簡單在于,所有的JSON都由大括號,中括號,以及key-value對構成。
復雜之處在于,它可以進行各種任意的深層次的嵌套,來達到“任何你想要的數據模式”,這也是JSON的精髓之所在。
7.mongo Shell 不同于nodeJS,它是同步的。
8.mongoDB的數據模式設計的關鍵問題是“有沒有必要嵌入”,通俗來講就是有沒有必要劃分很多collection,是否可以適當的將一些collection進行合并(嵌入embed),后面第三部分詳談。
9.mongoDB和nodeJS一樣底層都是用C++寫的,這也是性能好的原因之一。
10.訪問mongoDB的方式有兩種,一種是直接通過mongoShell訪問,這種訪問方式簡單快捷,操作命令跟js函數語法是無縫對接的,第二種就是app通過driver進行訪問了。
也就是傳說中的增刪改查,以下右邊的就是mongoDB的增刪改查:
Create - Insert
Read - Find
Update - Update
Delete - Remove
值得一說的是,mongoDB的操作函數(方法)和js 編程語言的語法的無縫對接的,這無形就形成了代碼大一統的局面,不像一些SQL的語句是獨立于編程語言的。
1.Findnodejs中的mongoDB driver:
db.collection.find( { 1 }, { 2 }, { 3 } ); // 1.Selector 選擇器,就類似于SQL中的 WHERE // 2.projection 顯示器,用于選擇要顯示的 key // 3.option 選項, 用于選擇排序,限制條數,跳過的操作 var selector = {type :"exam"} , projection = {score: 1} , option = {sort: 1, skip: 50, limit :20}; db.collection.find(selector, projection, option)
在MongoShell中查詢
db.scores.find({type :"exam"}, {score: 1}).sort({score: 1}).skip(50).limit(20)
其中selector涉及到$gt, $gte, $lt, $lte, $regex, $exists, $all, $in的使用,
db.score.find({score: {$gt: 60, $lt: 100}) //查找score區于60到100之間記錄db.user.find({name:{$regex:"q"},email:{$exists: true}) //名字中含有q,并有Email的 db.fruits.find({$all :["banana", "apple"]}) //同時包含香蕉和蘋果 db.fruit.find({$in : ["apple", "pear"]}) //有蘋果或者有梨2.Update
db.people.update( { 1 } , { 2 } , { 3 } ) // 1. selector 同上 // 2. operator // 3. option
其中operator涉及 $set $unset $inc 用來選擇更新相關屬性
db.people.update({name:"Alice"}, {name: "Alice", age:30}) //機械覆蓋式更新 db.people.update({name:"Alice"}, {$inc:{age: 1}}) //選擇更新age+1 db.people.update({name:"Alice"}, {$unset:{profession:1}}) //刪除profession屬性
利用$push $pop $ pushAll $pull $pullAll $addToSet 操作來數組
//設id為1 的數組 //[ 1,2,5,4,6] db.arrays.update({_id : 1}, {$pop: {a: 1}}) //[ 1, 2, 5, 4 ] db.arrays.update({_id : 1}, {$pop: {a: -1}}) //[ 2, 5, 4 ] db.arrays.update({_id : 1}, {$pushAll: {a:[7,8,9]}} //[ 2, 5, 4, 7, 8, 9] db.arrays.update({_id : 1}, {$pull:{a: 5}}) //[ 2, 4, 7, 8, 9] db.arrays.update({_id : 1}, {$pullAll{a :[2,4,8]}}) //[ 7, 9] db.arrays.update({_id : 1}, {addToSet{ a : 5}}) //[ 7, 9, 5] db.arrays.update({_id : 1}, {addToSet{ a : 5}}) //[ 7, 9, 5]
總結: $push 和 $pull這一對操作的類似數組的 『位移』就像stack
而 $ pushAll $pull $pullAll $addToSet 則直接 操作的是 『數組的值』
最后就是update中的option了,涉及兩個 $multi 和 $upsert
// 假如要update的對象在collection中沒有找到,但是還是要update則需要用upsert db.people.update({age:{$gt:50},{$set:{name:"William"}},{upsert: true}) //更新多條數據,則必須使用 multi : true 否則只更新首條數據 db.people.update({}, {$set{title:{"Dr"}}, {multi: true})3.Remove
這個簡單只需要selector 即可刪除選中記錄,值得一提的是與update不同,操縱刪除多條數據不需要使用$multi ,直接刪除即可。
(未完待續)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/18712.html
摘要:如圖連接成功后,顯示你的數據庫,在這個節目可以對數據庫進行操作。如圖安裝與加載首先假定你已經安裝了,命令行工具輸入在使用的文件中即可。創建讀取更新刪除單值讀取上文是在中基于對進行增刪查改操作的簡單介紹,以后會有進階的文章。 關鍵詞:mongodb安裝 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查詢,增加,修改,刪除 工具介紹 Mon...
摘要:如圖連接成功后,顯示你的數據庫,在這個節目可以對數據庫進行操作。如圖安裝與加載首先假定你已經安裝了,命令行工具輸入在使用的文件中即可。創建讀取更新刪除單值讀取上文是在中基于對進行增刪查改操作的簡單介紹,以后會有進階的文章。 關鍵詞:mongodb安裝 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查詢,增加,修改,刪除 工具介紹 Mon...
摘要:說到檔案系統,選文檔數據庫再合適不過了。熟悉的人看這個會很眼熟,沒錯,這就是從借鑒過來,并用在我的關系數據庫查詢上。接口規范接口的主要目是為了傳遞數據,數據結構已經在上面給出。為便于不同系統不同終端的數據交換,也將應當在接口支持之內。 說到檔案系統,選文檔數據庫再合適不過了。談到文檔數據庫一般想到的是 MongoDB、CouchDB 之類的,可這里要說的不是這些,而是另一個 NoSQL...
摘要:說到檔案系統,選文檔數據庫再合適不過了。熟悉的人看這個會很眼熟,沒錯,這就是從借鑒過來,并用在我的關系數據庫查詢上。接口規范接口的主要目是為了傳遞數據,數據結構已經在上面給出。為便于不同系統不同終端的數據交換,也將應當在接口支持之內。 說到檔案系統,選文檔數據庫再合適不過了。談到文檔數據庫一般想到的是 MongoDB、CouchDB 之類的,可這里要說的不是這些,而是另一個 NoSQL...
閱讀 3328·2023-04-26 00:07
閱讀 3922·2021-11-23 10:08
閱讀 2940·2021-11-22 09:34
閱讀 859·2021-09-22 15:27
閱讀 1749·2019-08-30 15:54
閱讀 3743·2019-08-30 14:07
閱讀 913·2019-08-30 11:12
閱讀 678·2019-08-29 18:44