Python全棧MongoDB資料庫(資料的查詢)

巴黎香榭發表於2018-08-20
非關係型資料庫和關係型資料庫的區別?
不是以關係模型構建的,結構自由
非關係型資料庫不保證資料一致性
非關係型資料庫可以在處理高併發和海量資料時彌補關聯式資料庫的不足
非關係型資料庫在技術上沒有關係型資料庫技術成熟
查詢操作:
db.集合名.find(查詢條件,域)
查詢條件:
    鍵值對的形式給出要展示的文件
域:
以鍵值對對的形式給出要展示或不展示的域
0為值不顯示該域 1為值顯示該域
如果使用0設定某些域不顯示預設其他域顯示
如果使用1設定某些域顯示預設其他域不顯示
*_id 只有設定為0才不顯示否則預設顯示
除_id以外,其他域必須同時設定0或1
db.集合名.findOne(查詢條件,域)
查詢複合條件的第一條文件
查詢條件(query):
操作符:
使用$註明的一特殊意義的字串,表達某個特定含義
比如:$gt表示大於
語法:
db.集合名.find({name:{$gt:”tom”}}, {_id:0})
比較操作符:
$eq 等於
$lt         小於(字串也可以比較大小)
$lte        小於等於
$gt        大於
$gte         大於等於
$ne        不等於
$in          在什麼裡(in)
$nin        不在什麼裡(not in)
邏輯操作符:
$and    與
query內如果多個條件用逗號隔開預設就是and關係
$or       或
$not     非
$nor     既不也不
陣列:
使用中括號[]將一定的資料組織為一種資料結構
陣列中的資料型別可以不同  是有序的
db.class2.find({score:{$gt:90}}, {_id:0})
$size
    通過陣列中個數查詢
$all
    查詢陣列中包含多項的
$slice
取陣列中部分顯示,在域(field)中宣告
其他query查詢:
$exists
判斷一個域是否存在
$mod
餘數查詢
$type
資料型別查詢
distinct()
db.class2.distinct(“score”)
    檢視集合內某個域的取值範圍
pretty()
將查詢結果格式化顯示
limit(n)
顯示查詢結果的前n條結果
skip(2)
跳過前條顯示後面的結果 
count()
計數統計
sort({filed:1/-1})
排序
引數:鍵代表那個域,1表示升序, -1表示降序
複合排序: 當第一排序項相同的時候按照第二排序項排序,以此類推
函式的連續呼叫
當一個函式的返回結果仍然是文件集合的時候可以連續呼叫函式
文件的刪除操作
       db.集合名.remove(query,justOne)
remove(query,justOne)
功能 : 刪除文件
引數 : query
篩選要刪除的文件,相當於where
                        用法同 查詢
justOne
布林值  
             預設為False 表示刪除所有複合條件的文件
                          如果設定為true 則表示只刪除第一條複合條件文件

修改操作:
db.集合名.update(query, update,upert,multi)
引數:
query:
篩選要查詢要修改的文件
update:
將篩選的文件修改為什麼內容
需要配合修改操作符
upsert:
bool值  預設false  如果query的文件不存在則不進行任何操作
設定為true 如果query和文件不存在 就根據query和update插入新文件
multi:
bool值  預設false 如果query文件有多條則只修改第一條
設定為true 則修改所有符合條件的文件、
綜合示例:

1. 建立資料庫 名字 grade
use grade

2. 資料庫中建立集合 名字  class
3. 集合中插入若干文件格式如下
{name:`zhang`,age:10,sex:`m`,hobby:[`a`,`b`...]}

年齡在4-13之間
hobby幾項都可以,可選項: draw  sing  dance  basketball  football  pingpong  running  computer 
db.class.insert({name:`zhang`,age:10,sex:`m`,hobby:[`a`,`b`...]})

4. 查詢練習
檢視班級所人資訊
db.class.find()

檢視年齡大於10歲的學生資訊
db.class.find({age:{$gt:10}})

檢視年齡 8-11 歲之間的學生資訊
db.class.find({age:{$gt:8,$lt:11}})

找到年齡9歲且為男生的學員
db.class.find({age:9,sex:`m`})

找到年齡小於7歲或者大於11歲的學生
db.class.find({$or:[{age:{$gt:11}},{age:{$lt:7}}]})

找到年齡8歲或者11歲的學生
db.class.find({age:{$in:[8,11]}})

找到有兩項興趣愛好的學生
db.class.find({hobby:{$size:2}})

找到喜歡computer的學生
db.class.find({hobby:"computer"})

找到既喜歡畫畫,又喜歡跳舞的學生
db.class.find({hobby:{$all:[`draw`,`dance`]}})

統計興趣愛好有3項的學生人數
db.class.find({hobby:{$size:3}}).count()

找到本班年齡第二大的學生
db.class.find({}).sort({age:-1}).skip(1).limit(1)

檢視學生學生興趣愛好的範圍
db.class.distinct(`hobby`)

找到年齡最小的三個同學
db.class.find({}).sort({age:1}).limit(3)

刪除雖有年齡小於6歲或者大於12歲的學員
db.class.remove({$or:[{age:{$lt:6}},{age:{$gt:12}}]}) 


相關文章