MangoDB基础-02
生活随笔
收集整理的這篇文章主要介紹了
MangoDB基础-02
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第二天
復習 : 數據庫創建刪除:? use? 數據庫名稱db.dropDatabase()集合的創建和刪除? db.createCollection('name')db.collectionName.insert()db.collectionName.drop()? 刪除db.collectionName.renameCollection() 重命名
數據庫的備份和恢復 mongodump (備份)?? mongorestore(恢復)數據庫的監測mongostat?? mongotop數據庫配置 mongod? --dbpath? path? --port? 8888
數據的插入 : insert()??? save()
=====================================db.collectionName? 集合對象
獲取集合對象 : db.getCollection('collection_name')
e.g. db.getCollection("class0").insert({name:'悟空',age:1700})
查找操作
select? ... from? tableName? where .....
db.collectionName.find()? ---> select * from tableName
find(query,field)功能 : 查找所有符合條件的文檔參數 : query : 篩選條件? 相當于where字句field : 展示的域? 相當于select的展示部分返回 : 返回所有查找到的內容
field 參數 : 選擇要展示的域? 傳一組鍵值對
鍵表示域名值表示是否顯示該域 0 表示不顯示?? 1 表示顯示
* 如果某個域給定0 則表示不顯示該域,其他的域均顯示如果某個域給定1 則表示顯示該域 ,其他的域都不顯示* _id 永遠默認為顯示,除非設置為0* 除_id外其他域 必須擁有相同的設置,全為0或者全為1* 如果不寫該參數則表示顯示所有域內容
e.g.? db.class0.find({},{_id:0,name:1,age:1})
query : 以鍵值對的形式給出查找條件
查找年齡 17e.g.?? db.class0.find({age:17},{_id:0})* 如果不寫第一個參數則表示查找所有內容
findOne()功能參數和find() 完全相同,只是只返回第一條查找到的文檔
e.g.?? db.class0.findOne({age:17},{_id:0})
query的更多用法
操作符: 使用$符號注明一個特殊字符串,表示一定的含義? e.g.??? $lt? 表示 小于
比較操作符$eq? 等于e.g.? db.class0.find({age:{$eq:17}},{_id:0})篩選年齡等于17的=====》 db.class0.find({age:17},{_id:0})
$lt? 小于? <
e.g.?? db.class0.find({age:{$lt:17}},{_id:0})* mongo中字符串也可以比較大小
$lte? 小于等于?? <=
e.g.?? db.class0.find({age:{$lte:17}},{_id:0})
$gt?? 大于? > e.g.? db.class0.find({age:{$gt:17}},{_id:0})
$gte?? 大于等于 >=e.g.? db.class0.find({age:{$gte:17}},{_id:0})
$ne?? 不等于?? !=e.g.?? db.class0.find({age:{$ne:17}},{_id:0})* 如果一個文檔沒有這個age域則顯示為不等于
$in?? 包含e.g.? db.class0.find({age:{$in:[16,17,18]}},{_id:0})
$nin? 不包含
e.g.? db.class0.find({age:{$nin:[16,17,18]}},{_id:0})
邏輯操作符
$and?? 邏輯與
年齡小于19 并且 性別為男db.class0.find({age:{$lt:19},sex:'m'},{_id:0})年齡小于19 并且 大于15db.class0.find({age:{$lt:19,$gt:15}},{_id:0})
e.g.? db.class0.find({$and:[{age:17},{name:'Lei'}]})
$or? 邏輯或
e.g.db.class0.find({$or:[{age:{$lt:22}},{name:'悟空'}]},{_id:0})
db.class0.find({$or:[{age:{$lt:18}},{age:{$gt:30}}]},{_id:0})
$not?? 邏輯非
e.g.? db.class0.find({age:{$not:{$eq:17}}},{_id:0})
$nor? 既不也不?? (表示列表集合中的條件都不具備)
db.class0.find({$nor:[{age:{$gt:18}},{sex:'m'}]},{_id:0})
條件混合
(年齡小于20? 或者 姓名為阿紅) 并且? 性別為女的人
db.class0.find({$and:[{$or:[{age:{$lt:20}},{name:'阿紅'}]},{sex:'w'}]},{_id:0})
年齡小于等于17? 或者? (姓名大于Tom 并且 年齡大于100)db.class0.find({$or:[{age:{$lte:17}},{name:{$gt:'Tom'},age:{$gt:100}}]},{_id:0})
數組查找 :
查看數組中包含某一項的e.g.?? db.class1.find({hobby:'吃'},{_id:0})
$all 查找一個數組中同時包含多項的文檔
e.g. db.class1.find({hobby:{$all:['拍電影','代言']}},{_id:0})查找hobby數組中既有拍電影,又有代言的文檔
$size 查找數組元素個數為指定個數的文檔e.g.? db.class1.find({hobby:{$size:3}},{_id:0})查找hobby數組中包含三項的文檔
數組切片顯示$slice? 對數組切片顯示
e.g.db.class1.find({hobby:{$size:3}},{_id:0,hobby:{$slice:2}})顯示數組的前兩項
e.g.db.class1.find({hobby:{$size:3}},{_id:0,hobby:{$slice:[1,2]}})跳過第一項,顯示后面兩項
其他查找方法:
$exists判斷一個域是否存在
e.g.? 查找存在sex域的文檔db.class0.find({sex:{$exists:true}},{_id:0})
e.g.? 查找不存在sex域的文檔db.class0.find({sex:{$exists:false}},{_id:0})
$mod做除數余數查找
e.g. 查找年齡 被2除余1的文檔 db.class0.find({age:{$mod:[2,1]}},{_id:0})
$type 查找指定數據類型的文檔
e.g. 查找hobby中包含數據類型為 2 的數據的文檔db.class1.find({hobby:{$type:2}},{_id:0})
數據類型對照:https://docs.mongodb.com/manual/reference/operator/query/type/
進一步的信息篩選
distinct() 功能 : 查看一個集合中某個域值的覆蓋范圍
e.g.? 查看集合中age域的值都有哪些db.class0.distinct('age')
pretty()功能 : 將查詢結果格式化顯示
e.g.??? db.class0.find().pretty()
limit(n)功能: 查詢結果顯示前 n條
e.g. 查詢結果顯示前3個db.class0.find({},{_id:0}).limit(3)
skip(n)功能 : 顯示時跳過前n條
e.g. 顯示時跳過前三條db.class0.find({},{_id:0}).skip(3)
count()功能 :對查找結果計數統計
e.g.? 統計sex 為 m的文檔數量db.class0.find({sex:'m'},{_id:0}).count()
sort({鍵:1/-1})功能 : 對查找結果排序1 表示按照升序排列, -1 表示按照降序排列
對查找結果按照年齡升序排列db.class0.find({age:{$exists:true}},{_id:0}).sort({age:1})
復合排序 : 當第一排序項相同的時候,按照第二排序項排序
db.class0.find({age:{$exists:true}},{_id:0}).sort({age:1,name:-1})
函數的連續使用獲取集合中年齡最小的三個文檔db.class0.find({},{_id:0}).sort({age:1}).limit(3)
刪除文檔delete from tableName where ....
db.collectionName.remove(query,justOne)功能 : 刪除指定的文檔參數 :? query : 篩選要刪除的文檔, 類似where子句用法同 查找操作justOne :布爾值?? 默認 false 表示刪除所有篩選數據如果賦值為true 則表示只刪除第一條復合的文檔
e.g.? db.class0.remove({$or:[{age:{$exists:false}},{age:{$gt:100}}]})
刪除第一個復合條件的文檔db.class0.remove({sex:{$exists:false}},true)
刪除集合中所有文檔db.collectionName.remove({})
練習:1. 創建一個數據庫 名字grade use grade
2. 數據庫中創建一個集合名字 class3. 集合中插入若干數據 文檔格式如下{name:'zhang',age;10,sex:'m',hobby:['a','b','c']}hobby: draw? sing? dance? basketball football? pingpongcomputer
db.class.insert([{name:"zhang",age:10,sex:'m',hobby:['a','b','c']},.....])
4. 查找練習查看班級所有人信息find()
查看班級中年齡為8歲的學生信息find({age:8})
查看年齡大于10歲的學生信息find({age:{$gt:10}})
查看年齡在 4---8歲之間的學生信息 find({age:{$gte:4,$lte:8}})
找到年齡為6歲且為男生的學生find({age:6,sex:'m'})
找到年齡小于7歲或者大于10歲的學生find({$or:[age:{$lt:7},age:{$gt:10}]})
找到年齡是8歲或者11歲的學生find({age:{$in:[8,11]}})
找到興趣愛好有兩項的學生find({hobby:{$size:2}})
找到興趣愛好有draw的學生find({hobby:"draw"})
找到既喜歡畫畫又喜歡跳舞的學生find({hobby:{$all:["draw","dance"]}})
統計愛好有三項的學生人數find({hobby:{$size:3}}).count()
找出本班年齡第二大的學生find().sort({age:-1}).skip(1).limit(1)
查看學生的興趣范圍db.class.distinct('hobby')
將學生按年齡排序找到年齡最大的三個find().sort({age:-1}).limit(3)
刪除所有 年級大于12或者小于4歲的學生remove({$or:[{age:{$gt:12}},{age:{$lt:4}}]})
作業 : 復習 數據的查找 和刪除操作mongo練習
復習 : 數據庫創建刪除:? use? 數據庫名稱db.dropDatabase()集合的創建和刪除? db.createCollection('name')db.collectionName.insert()db.collectionName.drop()? 刪除db.collectionName.renameCollection() 重命名
數據庫的備份和恢復 mongodump (備份)?? mongorestore(恢復)數據庫的監測mongostat?? mongotop數據庫配置 mongod? --dbpath? path? --port? 8888
數據的插入 : insert()??? save()
=====================================db.collectionName? 集合對象
獲取集合對象 : db.getCollection('collection_name')
e.g. db.getCollection("class0").insert({name:'悟空',age:1700})
查找操作
select? ... from? tableName? where .....
db.collectionName.find()? ---> select * from tableName
find(query,field)功能 : 查找所有符合條件的文檔參數 : query : 篩選條件? 相當于where字句field : 展示的域? 相當于select的展示部分返回 : 返回所有查找到的內容
field 參數 : 選擇要展示的域? 傳一組鍵值對
鍵表示域名值表示是否顯示該域 0 表示不顯示?? 1 表示顯示
* 如果某個域給定0 則表示不顯示該域,其他的域均顯示如果某個域給定1 則表示顯示該域 ,其他的域都不顯示* _id 永遠默認為顯示,除非設置為0* 除_id外其他域 必須擁有相同的設置,全為0或者全為1* 如果不寫該參數則表示顯示所有域內容
e.g.? db.class0.find({},{_id:0,name:1,age:1})
query : 以鍵值對的形式給出查找條件
查找年齡 17e.g.?? db.class0.find({age:17},{_id:0})* 如果不寫第一個參數則表示查找所有內容
findOne()功能參數和find() 完全相同,只是只返回第一條查找到的文檔
e.g.?? db.class0.findOne({age:17},{_id:0})
query的更多用法
操作符: 使用$符號注明一個特殊字符串,表示一定的含義? e.g.??? $lt? 表示 小于
比較操作符$eq? 等于e.g.? db.class0.find({age:{$eq:17}},{_id:0})篩選年齡等于17的=====》 db.class0.find({age:17},{_id:0})
$lt? 小于? <
e.g.?? db.class0.find({age:{$lt:17}},{_id:0})* mongo中字符串也可以比較大小
$lte? 小于等于?? <=
e.g.?? db.class0.find({age:{$lte:17}},{_id:0})
$gt?? 大于? > e.g.? db.class0.find({age:{$gt:17}},{_id:0})
$gte?? 大于等于 >=e.g.? db.class0.find({age:{$gte:17}},{_id:0})
$ne?? 不等于?? !=e.g.?? db.class0.find({age:{$ne:17}},{_id:0})* 如果一個文檔沒有這個age域則顯示為不等于
$in?? 包含e.g.? db.class0.find({age:{$in:[16,17,18]}},{_id:0})
$nin? 不包含
e.g.? db.class0.find({age:{$nin:[16,17,18]}},{_id:0})
邏輯操作符
$and?? 邏輯與
年齡小于19 并且 性別為男db.class0.find({age:{$lt:19},sex:'m'},{_id:0})年齡小于19 并且 大于15db.class0.find({age:{$lt:19,$gt:15}},{_id:0})
e.g.? db.class0.find({$and:[{age:17},{name:'Lei'}]})
$or? 邏輯或
e.g.db.class0.find({$or:[{age:{$lt:22}},{name:'悟空'}]},{_id:0})
db.class0.find({$or:[{age:{$lt:18}},{age:{$gt:30}}]},{_id:0})
$not?? 邏輯非
e.g.? db.class0.find({age:{$not:{$eq:17}}},{_id:0})
$nor? 既不也不?? (表示列表集合中的條件都不具備)
db.class0.find({$nor:[{age:{$gt:18}},{sex:'m'}]},{_id:0})
條件混合
(年齡小于20? 或者 姓名為阿紅) 并且? 性別為女的人
db.class0.find({$and:[{$or:[{age:{$lt:20}},{name:'阿紅'}]},{sex:'w'}]},{_id:0})
年齡小于等于17? 或者? (姓名大于Tom 并且 年齡大于100)db.class0.find({$or:[{age:{$lte:17}},{name:{$gt:'Tom'},age:{$gt:100}}]},{_id:0})
數組查找 :
查看數組中包含某一項的e.g.?? db.class1.find({hobby:'吃'},{_id:0})
$all 查找一個數組中同時包含多項的文檔
e.g. db.class1.find({hobby:{$all:['拍電影','代言']}},{_id:0})查找hobby數組中既有拍電影,又有代言的文檔
$size 查找數組元素個數為指定個數的文檔e.g.? db.class1.find({hobby:{$size:3}},{_id:0})查找hobby數組中包含三項的文檔
數組切片顯示$slice? 對數組切片顯示
e.g.db.class1.find({hobby:{$size:3}},{_id:0,hobby:{$slice:2}})顯示數組的前兩項
e.g.db.class1.find({hobby:{$size:3}},{_id:0,hobby:{$slice:[1,2]}})跳過第一項,顯示后面兩項
其他查找方法:
$exists判斷一個域是否存在
e.g.? 查找存在sex域的文檔db.class0.find({sex:{$exists:true}},{_id:0})
e.g.? 查找不存在sex域的文檔db.class0.find({sex:{$exists:false}},{_id:0})
$mod做除數余數查找
e.g. 查找年齡 被2除余1的文檔 db.class0.find({age:{$mod:[2,1]}},{_id:0})
$type 查找指定數據類型的文檔
e.g. 查找hobby中包含數據類型為 2 的數據的文檔db.class1.find({hobby:{$type:2}},{_id:0})
數據類型對照:https://docs.mongodb.com/manual/reference/operator/query/type/
進一步的信息篩選
distinct() 功能 : 查看一個集合中某個域值的覆蓋范圍
e.g.? 查看集合中age域的值都有哪些db.class0.distinct('age')
pretty()功能 : 將查詢結果格式化顯示
e.g.??? db.class0.find().pretty()
limit(n)功能: 查詢結果顯示前 n條
e.g. 查詢結果顯示前3個db.class0.find({},{_id:0}).limit(3)
skip(n)功能 : 顯示時跳過前n條
e.g. 顯示時跳過前三條db.class0.find({},{_id:0}).skip(3)
count()功能 :對查找結果計數統計
e.g.? 統計sex 為 m的文檔數量db.class0.find({sex:'m'},{_id:0}).count()
sort({鍵:1/-1})功能 : 對查找結果排序1 表示按照升序排列, -1 表示按照降序排列
對查找結果按照年齡升序排列db.class0.find({age:{$exists:true}},{_id:0}).sort({age:1})
復合排序 : 當第一排序項相同的時候,按照第二排序項排序
db.class0.find({age:{$exists:true}},{_id:0}).sort({age:1,name:-1})
函數的連續使用獲取集合中年齡最小的三個文檔db.class0.find({},{_id:0}).sort({age:1}).limit(3)
刪除文檔delete from tableName where ....
db.collectionName.remove(query,justOne)功能 : 刪除指定的文檔參數 :? query : 篩選要刪除的文檔, 類似where子句用法同 查找操作justOne :布爾值?? 默認 false 表示刪除所有篩選數據如果賦值為true 則表示只刪除第一條復合的文檔
e.g.? db.class0.remove({$or:[{age:{$exists:false}},{age:{$gt:100}}]})
刪除第一個復合條件的文檔db.class0.remove({sex:{$exists:false}},true)
刪除集合中所有文檔db.collectionName.remove({})
練習:1. 創建一個數據庫 名字grade use grade
2. 數據庫中創建一個集合名字 class3. 集合中插入若干數據 文檔格式如下{name:'zhang',age;10,sex:'m',hobby:['a','b','c']}hobby: draw? sing? dance? basketball football? pingpongcomputer
db.class.insert([{name:"zhang",age:10,sex:'m',hobby:['a','b','c']},.....])
4. 查找練習查看班級所有人信息find()
查看班級中年齡為8歲的學生信息find({age:8})
查看年齡大于10歲的學生信息find({age:{$gt:10}})
查看年齡在 4---8歲之間的學生信息 find({age:{$gte:4,$lte:8}})
找到年齡為6歲且為男生的學生find({age:6,sex:'m'})
找到年齡小于7歲或者大于10歲的學生find({$or:[age:{$lt:7},age:{$gt:10}]})
找到年齡是8歲或者11歲的學生find({age:{$in:[8,11]}})
找到興趣愛好有兩項的學生find({hobby:{$size:2}})
找到興趣愛好有draw的學生find({hobby:"draw"})
找到既喜歡畫畫又喜歡跳舞的學生find({hobby:{$all:["draw","dance"]}})
統計愛好有三項的學生人數find({hobby:{$size:3}}).count()
找出本班年齡第二大的學生find().sort({age:-1}).skip(1).limit(1)
查看學生的興趣范圍db.class.distinct('hobby')
將學生按年齡排序找到年齡最大的三個find().sort({age:-1}).limit(3)
刪除所有 年級大于12或者小于4歲的學生remove({$or:[{age:{$gt:12}},{age:{$lt:4}}]})
作業 : 復習 數據的查找 和刪除操作mongo練習
總結
以上是生活随笔為你收集整理的MangoDB基础-02的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qq文件对方接收后一定会有提示吗_为什么
- 下一篇: eclipse环境配置、快捷键及基本操作