【MongoDB】 1.入門 《MongoDB權威指南》【七天讀書】
目錄

一、前言
二、第一部分 入門
1. 簡介
2.基本概念
3.數據類型
4.插入數據
5.刪除數據
6.更新文檔
7.查詢文檔
三、總結
一、前言
本書從淺入深地介紹了MongoDB,是初學者非常全面的學習指南。
二、第一部分 入門
1. 簡介
MongoDB是面向文檔的數據庫,他的優勢在于
易于使用
易于擴展
功能豐富
索引
聚合
特殊的集合和索引類型
文件存儲
性能卓越
2.基本概念
以下是一些基本概念,通過這些概念可以對MongoDB有初步認識。
文檔相當于關系型數據庫的行
集合相當于關系型數據庫的表
一個MongoDB可以擁有多個獨立的數據庫
每個文檔都有唯一的鍵 _id
mongo shell 對MongoDB的實例管理和查詢提供了內置操作
3.數據類型
MongoDB的文檔被認為是類似JSON存儲,以下是常見的數據類型
null
布爾類型 true false
數值類型 默認是64位的浮點型,還可以是NumberIne(“3”) 或者 NumberLong(“3”)
字符串類型
日期類型 new Date()
正則表達式
數組
內嵌文檔
Object ID
二進制數據
代碼
4.插入數據
MongoDB支持單行插入insertOne,和多行插入insertMany。
> db.t1.insertOne({"name":"xiaoyuqingnian"}) { "acknowledged" : true, "insertedId" : ObjectId("61ed6e4a6e4687eeb69f4487") }
1
2
3
4
5
> db.t1.insertMany([{"name":"xiaoyuqingnian"},{"name":"xiaoyuqingnian2"}]) { "acknowledged" : true, "insertedIds" : [ ObjectId("61ed6ef46e4687eeb69f4488"), ObjectId("61ed6ef46e4687eeb69f4489") ] }
1
2
3
4
5
6
7
8
MongoDB能夠接收的最大消息長度是48MB,如果超過48MB,多數驅動程序會拆分成多個48MB的請求。
所有文檔的大小不能超過16MB
5.刪除數據
deleteOne會刪除符合條件的第一條數據,deleteMany則會刪除符合條件的全部數據。
> db.t1.deleteOne({ "_id": ObjectId("61ed6e4a6e4687eeb69f4487")}) { "acknowledged" : true, "deletedCount" : 1 }
1
2
> db.t1.insertMany([{"name":"xiaoyuqingnian","type":"a"},{"name":"xiaoyuqingnian2","type":"a"}]) { "acknowledged" : true, "insertedIds" : [ ObjectId("61ed730c6e4687eeb69f448a"), ObjectId("61ed730c6e4687eeb69f448b") ] } > db.t1.find() { "_id" : ObjectId("61ed6ef46e4687eeb69f4488"), "name" : "xiaoyuqingnian" } { "_id" : ObjectId("61ed6ef46e4687eeb69f4489"), "name" : "xiaoyuqingnian2" } { "_id" : ObjectId("61ed730c6e4687eeb69f448a"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61ed730c6e4687eeb69f448b"), "name" : "xiaoyuqingnian2", "type" : "a" } > db.t1.deleteMany({ "type":"a"}) { "acknowledged" : true, "deletedCount" : 2 } > db.t1.find() { "_id" : ObjectId("61ed6ef46e4687eeb69f4488"), "name" : "xiaoyuqingnian" } { "_id" : ObjectId("61ed6ef46e4687eeb69f4489"), "name" : "xiaoyuqingnian2" }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
如果不帶條件則會刪除整個集合。
> db.t1.deleteMany({}) { "acknowledged" : true, "deletedCount" : 2 }
1
2
推薦刪除集合的方式是drop()。
6.更新文檔
更新文檔有三種
updateOne
updateMany
replaceOne
replaceOne注意只會匹配第一條數據,在有多條符合條件的記錄時需要注意
> db.t1.replaceOne({"name":"xiaoyuqingnian"},{"name":"xiaoyuxiaoyu"}) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } > db.t1.find() { "_id" : ObjectId("61edf1586e4687eeb69f448c"), "name" : "xiaoyuxiaoyu" } { "_id" : ObjectId("61edf1586e4687eeb69f448d"), "name" : "xiaoyuqingnian2", "type" : "a" } { "_id" : ObjectId("61edf15a6e4687eeb69f448e"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf15a6e4687eeb69f448f"), "name" : "xiaoyuqingnian2", "type" : "a" } { "_id" : ObjectId("61edf15b6e4687eeb69f4490"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf15b6e4687eeb69f4491"), "name" : "xiaoyuqingnian2", "type" : "a" } { "_id" : ObjectId("61edf15c6e4687eeb69f4492"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf15c6e4687eeb69f4493"), "name" : "xiaoyuqingnian2", "type" : "a" } { "_id" : ObjectId("61edf15d6e4687eeb69f4494"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf15d6e4687eeb69f4495"), "name" : "xiaoyuqingnian2", "type" : "a" } { "_id" : ObjectId("61edf15d6e4687eeb69f4496"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf15d6e4687eeb69f4497"), "name" : "xiaoyuqingnian2", "type" : "a" } { "_id" : ObjectId("61edf15e6e4687eeb69f4498"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf15e6e4687eeb69f4499"), "name" : "xiaoyuqingnian2", "type" : "a" } { "_id" : ObjectId("61edf1636e4687eeb69f449a"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf1636e4687eeb69f449b"), "name" : "xiaoyuqingnian2", "type" : "c" } { "_id" : ObjectId("61edf1666e4687eeb69f449c"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf1666e4687eeb69f449d"), "name" : "xiaoyuqingnian2", "type" : "d" } > db.t1.replaceOne({"name":"xiaoyuqingnian"},{"name":"xiaoyuxiaoyu"}) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } > db.t1.find() { "_id" : ObjectId("61edf1586e4687eeb69f448c"), "name" : "xiaoyuxiaoyu" } { "_id" : ObjectId("61edf1586e4687eeb69f448d"), "name" : "xiaoyuqingnian2", "type" : "a" } { "_id" : ObjectId("61edf15a6e4687eeb69f448e"), "name" : "xiaoyuxiaoyu" } { "_id" : ObjectId("61edf15a6e4687eeb69f448f"), "name" : "xiaoyuqingnian2", "type" : "a" } { "_id" : ObjectId("61edf15b6e4687eeb69f4490"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf15b6e4687eeb69f4491"), "name" : "xiaoyuqingnian2", "type" : "a" } { "_id" : ObjectId("61edf15c6e4687eeb69f4492"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf15c6e4687eeb69f4493"), "name" : "xiaoyuqingnian2", "type" : "a" } { "_id" : ObjectId("61edf15d6e4687eeb69f4494"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf15d6e4687eeb69f4495"), "name" : "xiaoyuqingnian2", "type" : "a" } { "_id" : ObjectId("61edf15d6e4687eeb69f4496"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf15d6e4687eeb69f4497"), "name" : "xiaoyuqingnian2", "type" : "a" } { "_id" : ObjectId("61edf15e6e4687eeb69f4498"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf15e6e4687eeb69f4499"), "name" : "xiaoyuqingnian2", "type" : "a" } { "_id" : ObjectId("61edf1636e4687eeb69f449a"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf1636e4687eeb69f449b"), "name" : "xiaoyuqingnian2", "type" : "c" } { "_id" : ObjectId("61edf1666e4687eeb69f449c"), "name" : "xiaoyuqingnian", "type" : "a" } { "_id" : ObjectId("61edf1666e4687eeb69f449d"), "name" : "xiaoyuqingnian2", "type" : "d" }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
更新運算符用來對文檔進行部分更新,比如數據增減、數組元素的增刪。
> db.t1.insertOne({"name":"xiaoyu","blogCount":"1"}) { "acknowledged" : true, "insertedId" : ObjectId("61eeb3226e4687eeb69f449e") } > db.t1.insertOne({"name":"xiaoyuqingnian","blogCount":1}) { "acknowledged" : true, "insertedId" : ObjectId("61eeb3f26e4687eeb69f449f") } > db.t1.updateOne({"_id":ObjectId("61eeb3f26e4687eeb69f449f")},{$inc:{"blogCount":1}}) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } { "_id" : ObjectId("61eeb3f26e4687eeb69f449f"), "name" : "xiaoyuqingnian", "blogCount" : 2 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
涉及到的用法有
$inc 增加數字
$set 設置
$push將元素添加到數組末尾
$ne $addToSet 不存在時才添加,避免重復添加
$pop從數組頭部或者尾部刪除元素
$pull刪除符合條件匹配元素
upsert如果匹配不到就新增文檔
返回被更新的文檔,有三種集合方法,分別完成了刪除、替換、更新等方法
findOneAndDelete
findOneAndReplace
findOneAndUpdate
7.查詢文檔
注意的是,查詢的值必須是常量、
find()不帶條件就是查詢全部結果,帶條件就是查詢匹配的結果,我們可以通過下面的比較運算符做條件比較
$lt 小于 <
$lte 小于等于 <=
$gt 大于 >
$gte 大于等于 >=
$ne 不等于 !=
> db.t1.find({ "blogCount" : { "$lt": 10 }}) { "_id" : ObjectId("61eeb3f26e4687eeb69f449f"), "name" : "xiaoyuqingnian", "blogCount" : 2 }
1
2
OR查詢支持兩種,$in支持查詢多個鍵值,$or可以查詢多個匹配值。
$not可以和任何條件結合,表示不匹配。
$regex可以匹配正則表達式。
數組查詢
$all查詢全部元素
$size查詢特定數組長度
$slice返回特定長度的子集
分頁和sql類似,使用limit、skip、sort進行限定結果。
> db.t1.find().skip(1).limit(2).sort({"name":1}) { "_id" : ObjectId("61eec9cf6e4687eeb69f44a0"), "name" : "xiaoyu2", "blogCount" : "10" } { "_id" : ObjectId("61eec9d86e4687eeb69f44a1"), "name" : "xiaoyu3", "blogCount" : "15" }
1
2
3
三、總結
本書的第一部分從基礎入手,介紹了Mongo的特點、數據類型、增刪改查的語法。
值得留意的是,本文的語言十分詼諧,在描述插入文檔時,提到了所有文檔大小必須小于16MB,而《戰爭與和平》整部著作也只有3.14MB。
這部分留下的坑,后續單獨補上
數組的插入完整案例
數組的查詢完整案例
游標的使用和理解
MongoDB 數據結構
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。