朋友們,又一課程推出
舉辦了網路研討會
MongoDB 特性
MongoDB的 是一個開源的以文件為導向的 DBMS,不需要表格模式的描述。 它被歸類為NoSQL並使用BSON(二進位JSON)。 開箱即用,用 C++ 編寫並支援 JavaScript 語法。 沒有 SQL 支援。
MongoDB 擁有許多流行程式語言(C、C++、C#、Go、Java、JavaScript、Perl、PHP、Python、Ruby 等)的驅動程式。 還有其他程式語言的非官方和社群支援的驅動程式。
好吧,讓我們看看有用的基本指令。
因此,要在 Docker 中部署 MongoDB, 我們寫:
docker run -it --rm -p 127.0.0.1:27017:27017
--name mongo-exp-project mongo
docker exec -it mongo-exp-project mongo
就這樣發生了 客戶端啟動 MongoDB:
現在我們來寫傳統的 你好世界:
print (“Hello world!”)
在那之後 - 讓我們開始循環:
正如你所注意到的,在我們之前 普通JS, MongoDB 是一個成熟的 JavaScript 解譯器.
何時使用 MongoDB?
有一個故事,矽谷的新創公司通常都是一週前打開《HTML for Dummies》這本書的人。 他會選擇哪一個堆疊? 同意,出於顯而易見的原因,當他的瀏覽器中有 JavaScript、Node.js 在伺服器上運行、JavaScript 也在資料庫中運行時,這對他來說非常方便。 這是第一點。
其次,有
第三,我想強調一下,MongoDB的特色是好的 可擴展性 - 這是資料庫的關鍵功能之一。 如果您事先不知道負載是什麼,MongoDB 是完美的。 此外,它還支援開箱即用的模式,例如 分片 и 複製,而且這一切都做得相當透明,就是工作起來非常方便。
至於 術語 在 MongoDB 中:
- 資料庫是資料庫(方案、表格的集合);
- 在 MongoDB 中有這樣的東西 一個集合 - 這是一個表格和一組文件的類似物,在邏輯上應該連接起來;
- 文件類似於字串。
資料庫建立和簡單查詢
要建立資料庫,您只需開始使用它:
use learn
現在讓我們對文檔進行一個小的插入。 例如,假設它是一隻名為 Aurora 的獨角獸:
db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
db - 用於存取資料庫的全域對象,實際上就是「monga」本身。 用於分片 sh,用於複製 - rs.
該物件有哪些指令? db:
那麼,讓我們回到我們的命令,結果控制台將報告已插入一行:
字 unicorns
在一個團隊中 db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
表示一個集合。 請注意,我們沒有描述或創建該集合,只是簡單地寫了“獨角獸”,做了插入,然後我們就有了一個集合。
這就是我們如何能夠 取得我們所有的收藏:
db.getCollectionNames()
等等。 能 插入另一個 收藏:
現在我們問一下 完整收藏 (我們提醒您,在我們的例子中,資料庫已經包含兩個同名獨角獸的資訊):
db.unicorns.find()
請注意,這是我們的 JSON(有姓名、性別、體重、一些唯一的物件識別碼):
現在讓我們再插入幾個同名的獨角獸:
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
讓我們看看發生了什麼:
如您所見,我們還有其他欄位: 首頁 и 蠕蟲,這是極光所沒有的。
讓我們再補充一些獨角獸:
db.unicorns.insertMany([{name: 'Horny', dob: new Date(1992,2,13,7,47), loves: ['carrot','papaya'], weight: 600, gender: 'm', vampires: 63},
{name: 'Aurora', dob: new Date(1991, 0, 24, 13, 0), loves: ['carrot', 'grape'], weight: 450, gender: 'f', vampires: 43},
{name: 'Unicrom', dob: new Date(1973, 1, 9, 22, 10), loves: ['energon', 'redbull'], weight: 984, gender: 'm', vampires: 182},
{name: 'Roooooodles', dob: new Date(1979, 7, 18, 18, 44), loves: ['apple'], weight: 575, gender: 'm', vampires: 99}])
因此,我們使用 JavaScript 插入了另外四個物件:
您認為在哪個資料庫中儲存護照資料更方便:關係資料庫還是 Mongo?
答案是顯而易見的——在 Monga 中,上面的例子很好地說明了這一點。 KLADR 在俄羅斯聯邦是一個痛苦,這已不是什麼秘密。 Monga 非常適合地址,因為你可以將所有內容設定為數組,生活會輕鬆得多。 這是一個很好的 MongoDB 使用者案例.
讓我們加入更多獨角獸:
db.unicorns.insert({name: 'Solnara', dob: new Date(1985, 6, 4, 2, 1), loves:['apple', 'carrot', 'chocolate'], weight:550, gender:'f', vampires:80});
db.unicorns.insert({name:'Ayna', dob: new Date(1998, 2, 7, 8, 30), loves: ['strawberry', 'lemon'], weight: 733, gender: 'f', vampires: 40});
db.unicorns.insert({name:'Kenny', dob: new Date(1997, 6, 1, 10, 42), loves: ['grape', 'lemon'], weight: 690, gender: 'm', vampires: 39});
db.unicorns.insert({name: 'Raleigh', dob: new Date(2005, 4, 3, 0, 57), loves: ['apple', 'sugar'], weight: 421, gender: 'm', vampires: 2});
db.unicorns.insert({name: 'Leia', dob: new Date(2001, 9, 8, 14, 53), loves: ['apple', 'watermelon'], weight: 601, gender: 'f', vampires: 33});
db.unicorns.insert({name: 'Pilot', dob: new Date(1997, 2, 1, 5, 3), loves: ['apple', 'watermelon'], weight: 650, gender: 'm', vampires: 54});
db.unicorns.insert({name: 'Nimue', dob: new Date(1999, 11, 20, 16, 15), loves: ['grape', 'carrot'], weight: 540, gender: 'f'});
db.unicorns.insert({name: 'Dunx', dob: new Date(1976, 6, 18, 18, 18), loves: ['grape', 'watermelon'], weight: 704, gender: 'm', vampires: 165});
現在請注意文件。 作為 多布 我們存儲整個物件。 還有關於獨角獸喜歡什麼的訊息,但並不是每個人都有這些資訊。 所以裡面有謊言 全陣列.
順便說一句,為了更美觀地顯示結果,可以呼叫搜尋命令末尾的方法 .pretty()
:
如果您需要獲得 有關最新錯誤的信息,使用以下命令:
db.getLastError()
這可以在每次插入後完成,也可以配置 Write Concern。 最好閱讀有關它的內容
讓我們繼續進行更複雜的查詢
查詢精確欄位值:
db.unicorns.find({gender: 'm'})
透過編寫這樣的請求,我們將在控制台輸出中收到所有雄性獨角獸的清單。
你也可以做 一次查詢多個字段:依性別和體重:
以上,特別注意 $gt 選擇器,它可以讓你繁殖所有體重超過 700 的雄性獨角獸。
你可以檢查 這個領域到底存在嗎?:
db.unicorns.find({vampires: {$exists: false}})
或者像這樣:
db.unicorns.find({'parents.father': {$exists: true}})
下一支隊伍將帶來獨角獸, 名字以字母 A 或 a 開頭:
db.unicorns.find({name: {$regex: "^[Aa]"}})
現在讓我們考慮一下 數組搜尋。 問題#1:此指令將輸出什麼:
db.unicorns.find({loves:'apple'})
沒錯:每個愛蘋果的人。
以下命令將僅傳回包含以下內容的獨角獸數據 只有蘋果和西瓜:
db.unicorns.find({loves:[ "apple", "watermelon" ]})
還有一個命令:
db.unicorns.find({loves:[ "watermelon", "apple" ]})
在我們的例子中,它不會傳回任何內容,因為當我們傳遞一個陣列時,第一個元素與第一個元素進行比較,第二個元素與第二個元素進行比較,依此類推。也是說,數組也必須匹配 按位置 這些值。
這就是它的樣子 使用“OR”運算符搜尋數組:
下面的例子將向我們展示 使用 $all 運算子進行搜索。 這裡的順序並不重要:
我們也可以 按數組大小搜尋:
但是如果我們想找到一個大小大於一的陣列呢? 有一個運營商可以做到這一點 $哪裡,用它你可以寫更複雜的東西:
db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })
順便說一句,如果你想練習的話,
遊標特性
稍微跑題一下,說一下Monga的特點:
- find() 和其他操作不回傳資料 - 它們傳回所謂的「遊標」;
- 事實上,我們看到正在列印的數據是解釋器的工作。
打字 db.unicorns.find 如果不加括號,我們會得到提示:
我們繼續滿足要求
還有 $in 運算子:
db.unicorns.find({weight: {$in: [650, 704]}})
現在我們來談談更新。 例如,讓我們更改 Rooooodles 獨角獸的重量:
db.unicorns.update({name: "Roooooodles"}, {weight: 2222})
由於我們的行動,該文件 將徹底更新,並且其中僅保留一個指定欄位:
也就是說,我們的物件唯一保留的是權重 2222,當然還有 id。
您可以使用以下方法糾正這種情況 $設定:
db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})
也是可以的 增量值:
而且還有 插入 - 更新和插入的組合:
這是如何完成的 領域選擇:
還需要補充幾句話 跳過 и 限制:
各位同事,就這些了,如果你們想了解詳情的話,
來源: www.habr.com