MongoDB 《MongoDB 基礎(chǔ)教程》實(shí)驗(yàn)報(bào)告

3971cc7a37f14a60c7a53a64e52e6b05f46fb1fb (1).jpg
MongoDB 基礎(chǔ)教程.jpg

創(chuàng)建數(shù)據(jù)庫

# 格式
> use 數(shù)據(jù)庫名稱
# 例如
> use school

創(chuàng)建集合

  • 創(chuàng)建一個(gè)普通的集合
# 格式
> db.createCollection(集合名稱)
# 例如
> db.createCollection("student")
  • 創(chuàng)建一個(gè)帶參數(shù)的集合
# 格式
> db.createCollection(集合名稱,可選參數(shù))
# 例如
> db.createCollection("subject", {autoIndexId:true} )
可選參數(shù) 類型 說明
autoIndexId bool 默認(rèn)為 false,如果設(shè)置為 true,則會在 _id 字段上自動(dòng)創(chuàng)建索引
capped bool 如果為 true 則創(chuàng)建一個(gè)固定大小的集合,當(dāng)其條目達(dá)到最大時(shí)可以自動(dòng)覆蓋以前的條目。在設(shè)置其為 true 時(shí)也要指定參數(shù)大小
size int 如果 capped 為 true 則需要指定,指定參數(shù)的最大值,單位為 byte
max int 指定最大的文檔數(shù)

插入文檔

  • 插入 student 文檔
> db.student.insert([ 
{name:"小蘭",gender:"女",age:18 },
{name:"新一",gender:"男",age:18 }
])
  • 插入 subject 文檔
> subject_list = [{"name":"算數(shù)"},{"name":"圖畫"},{"name":"體育"}]
> db.subject.insert(subject_list)

更新文檔

  • 根據(jù) _id 更新
# 格式
> db.集合名稱.save({_id:ObjectId(文檔的_id),key:value})
# 例如
> db.student.save({_id:ObjectId("5f3633a5a36e80089d0c495d"),"name":"新一","gender":"男"})

根據(jù) _id 更新會替換之前的文檔,而非只更新某個(gè)字段。

  • 根據(jù)篩選項(xiàng)更新
# 格式
> db.集合名稱.update( {key1:value1},{$set:{key2:value2}} )
# 例如
> db.student.update( {"age":18},{$set:{"age":19}},{multi:true} )

update 默認(rèn)只對一個(gè)文檔更新,更新所有文檔需要添加 multi:true。

查詢文檔

  • 查詢所有
# 格式
> db.集合名稱.find()
# 例如
> db.student.find()
  • AND 查詢
# 格式
> db.集合名稱.find({ key: value })
# 例如
> db.student.find({ "name": "小蘭" })
  • OR 查詢
# 格式
> db.集合名稱.find({ $or: [{key1: value1},{key2: value2}] })
# 例如
> db.student.find({ $or: [{"name": "柯南"},{"name": "新一"}] })
  • 條件查詢
# 格式
> db.集合名稱.find({ key: {條件操作符:value} })
# 例如
> db.student.find({ "age": {$gte:18} })
條件操作符 含義
$lt 小于
$gt 大于
$lte 小于等于
$gte 大于等于
$ne 不等于
  • 模糊查詢
# 匹配前綴格式
> db.集合名稱.find({ key:"/^value/" })
# 例如
> db.student.find({ "age":"/^1/" })
# 匹配后綴格式
> db.集合名稱.find({ key:"/value$/" })
# 例如
> db.student.find({ "name":"/$蘭/" })
  • 數(shù)據(jù)類型查詢
# 格式
> db.集合名稱.find({ key:{$type:value} })
# 例如
> db.student.find({ "name":{$type:"string"} })
# 等同于
> db.student.find({ "name":{$type:2} })
類型值 數(shù)據(jù)類型 類型別名
1 雙精度型(Double) double
2 字符串(String) string
3 對象(Object) object
4 數(shù)組(Array) array
5 二進(jìn)制數(shù)據(jù)(Binary data) binData
7 對象 ID(Object id) objectId
8 布爾類型(Boolean) bool
9 日期(Date) date
10 空(Null) null
11 正則表達(dá)式(Regular Expression) regex
13 JS 代碼(Javascript) javascript
14 符號(Symbol) symbol
15 有作用域的 JS 代碼(JavaScript with scope) javascriptWithScope
16 32 位整型數(shù)(32-bit integer) int
17 時(shí)間戳(Timestamp) timestamp
18 64 位整型數(shù)(64-bit integer) long
-1 最小值(Min key) minKey
127 最大值(Max key) maxKey
  • 限制查詢
# 格式
> db.集合名稱.find().limit(value)
# 例如
> db.student.find().limit(1)
  • 跳過查詢
# 格式
> db.集合名稱.find().skip(value)
# 例如
> db.student.find().skip(1)
  • 排序查詢
# 格式
> db.集合名稱.find().sort({key:value})
# 例如
> db.student.find().sort({"name":1})    # 1表示升序
> db.student.find().sort({"age":-1})    # -1表示降序
  • 聚合查詢
# 格式
> db.集合名稱.aggregate(可選參數(shù))
# 例如
> db.student.aggregate([{
$group:{_id:"$age", count:{$sum:1}}
}])
可選參數(shù) 說明
$match 查詢,跟 find 一樣
$limit 限制顯示結(jié)果數(shù)量
$skip 忽略結(jié)果數(shù)量
$sort 排序
$group 按照給定表達(dá)式組合結(jié)果
聚合表達(dá)式 說明
$sum 計(jì)算總和
$avg 計(jì)算平均值
min 和max 計(jì)算最小值和最大值
$push 在結(jié)果文檔中插入值到一個(gè)數(shù)組
$addToSet 在結(jié)果文檔中插入值到一個(gè)數(shù)組,但不創(chuàng)建副本
$first 根據(jù)資源文檔的排序獲取第一個(gè)文檔數(shù)據(jù)
$last 根據(jù)資源文檔的排序獲取最后一個(gè)文檔數(shù)據(jù)

文檔的關(guān)系

  • 嵌入式關(guān)系
{
   "name": "小蘭",
   "age": 18,
   "gender": "女",
   "subject":
    [
       {
       "name": "圖畫 "
       }
    ]
}

把 subject 文檔嵌入到 student 文檔中,嵌入式關(guān)系比較適合一對一的情況。

  • 引用式關(guān)系
{
   "name": "新一",
   "age": 18,
   "gender": "男",
   "subject_ids": [
      ObjectId("5f36426fa36e80089d0c4960"),
      ObjectId("5f36426fa36e80089d0c4962")
   ]
}

通過引用 subject 文檔的 _id 來與 student 文檔建立關(guān)系,引用式關(guān)系比較適合一對多或者多對多的情況。

創(chuàng)建索引

  • 創(chuàng)建一個(gè)普通索引
# 格式
> db.集合名稱.ensureIndex({key:value})
# 例如
> db.student.ensureIndex({"name":1})    # 1表示升序
> db.student.ensureIndex({"age":-1})    # -1表示降序
  • 創(chuàng)建一個(gè)聯(lián)合索引
# 格式
> db.集合名稱.ensureIndex({key1:value1,key2:value2})
# 例如
> db.student.ensureIndex({"name":1,"age":1})
  • 創(chuàng)建一個(gè)帶參數(shù)的索引
# 格式
> db.集合名稱.ensureIndex({key:value},可選參數(shù))
# 例如
> db.student.ensureIndex({"name":1},{unique:true})
可選參數(shù) 類型 說明
background Boolean 建立索引要不要阻塞其他數(shù)據(jù)庫操作,默認(rèn)為 false
unique Boolean 建立的索引是否唯一,默認(rèn) false
name string 索引的名稱,若未指定,系統(tǒng)自動(dòng)生成
dropDups Boolean 建立唯一索引時(shí),是否刪除重復(fù)記錄,默認(rèn) flase
sparse Boolean 對文檔不存在的字段數(shù)據(jù)不啟用索引,默認(rèn) false
expireAfterSeconds integer 設(shè)置集合的生存時(shí)間,單位為秒
v index version 索引的版本號
weights document 索引權(quán)重值,范圍為 1 到 99999
default-language string 默認(rèn)為英語
language_override string 默認(rèn)值為 language

驗(yàn)證索引

  • 驗(yàn)證覆蓋索引
# 格式
> db.集合名稱.find({key:value}).explain()
# 例如
> db.student.find({"name":"小蘭"}).explain()
  • 驗(yàn)證指定索引
# 格式
> db.集合名稱.find({key:value}).hint({key:value}).explain()
# 例如
> db.student.find({"name":"小蘭"}).hint({name:1}).explain()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容