7.條件查詢
db.集合名.find()
db.集合名.findOne(查詢條件) 單條查詢
db.集合名.find().pretty() 對查詢結果美化
比較運算
$lt 小於
$lte 小於等於
$gt 大於
$gte 大於等於
$ne 不等於
db.集合名.find({key:{$lt:n}})
邏輯運算
and:
db.集合名.find($and:[{key1:'value1'},{key2:'value2'}]) 可以直接 db.集合名.find({key1:'value1',key2:'value2'})
or:
db.集合名.find($or:[{key1:'value1'},{key2:'value2'}])
混合
db.colname.find({$or:[{key:value,key1:value1},key2:value2]})
範圍運算
in:
db.集合名.find({key:{$in:[n1,n2,n3]}})
not in:
db.集合名.find({key:{$nin:[n1,n2,n3]}})
正則:只能用於字符串
db.集合名.find({key:/正則條件/})
db.集合名.find({key:{$regex:'正則條件'}})
自定義條件 js的函數func
db.集合名.find({$where:function(){return this.age == 18}})
'''
'''
8.find後的附加操作
db.集合名.find().skip(n) 略過的條數
db.集合名.find().limit(n) 限制返回條數
投影操作:限制返回的字段內容,格式 查詢所有,name為true返回name,_id默認返回,_id為false,就不返回,所以結果是隻展示所有的name
db.集合名.find({},{name:1,_id:0})
db.集合名.find().sort({age:1}) 以age排序 升序:1 降序:-1
db.集合名.find(條件).count() 統計
db.集合名.count(條件)
db.集合名.distinct(域名) 即字段名,以哪個字段來去重
'''
'''
9.聚合運算 管道$
db.集合名.aggregate({$group:{_id:'$gender'}})
分組,以gender來分組,並且作為id
db.集合名.aggregate({$group:{_id:'$gender',counter:{$sum:1}}})
分組,以gender來分組,並且作為id,然後 數量(每個性別的人數,counter可以隨便起),$sum求和 : 1 (1的比例來求和,即有1條數據為1個)
其實形成了一張虛擬的表,有兩個字段 主鍵_id和counter
db.集合名.aggregate({$group:{_id:'$gender',counter:{$sum:1},sum_age:{$sum:'$age'},avg_age:{$avg:'$age'}}})
虛擬表:4個字段 以gender分組 主鍵_id ,每個組的人數counter,年齡總和sum_age,平均年齡avg_age
db.集合名.aggregate({$group:{_id:'$gender',name_list:{$push:'$name'}}})
虛擬表:2個字段 以gender分組,主鍵_id,name_list字段:把分組後的每個名字push到相對應的位置
db.集合名.aggregate({$match:{age:18}})
管道$match 同find就是查詢,但是可以有後續的附加
查詢年齡是18的
db.集合名.aggregate({$match:{name:{$regex:'黃'}}},{$project:{name:1}})
管道$project 就是投影操作:限制返回的內容
查找名字含有黃的,然後投影只返回name字段,_id字段是默認返回的
db.集合名.aggregate({$limit:5},{$skip:2})
$limit(限制) 和 $skip(略過) 和find的後續操作含義相同,但是注意先後順序對結果的影響
db.集合名.aggregate({$sort:{age:1}})
$sort排序 1:升序 -1:降序
db.集合名.aggregate({$unwind:'$size'})
$unwind 拆分列表 拆分size size = ['M','S','L']
'''
'''
10.索引
查看索引
db.集合名.getIndexes()
創建索引
db.集合名.ensureIndex({key:1},{background:true})
以 key 來創建索引 1:升序 background在後臺來創建
刪除索引 db.集合名.dropIndex({key:1}) 以誰創建的就以誰刪除,並且順序也要帶上
以索引來查詢
db.集合名.find(查詢條件).hint(創建索引的條件{key:1 })
'''
'''
11.備份與恢復 在終端
備份
mongodump -h ip -d 備份數據庫名 -o 指定目錄
恢復
mongorestore -h ip -d 恢復數據庫名 --dir 從哪個文件夾恢復
導入與導出 在終端
導出
mongoexport -h ip -d 導出的數據庫 -c 導出的表 -o filename.json (如果使用表格--type csv 指明字段的標題-f name,age,gender )
將指定的集合中的數據導出成文件
導入
mongoimport -d dbname -c colname filename
'''
'''
12.python交互
安裝 pip install pymongo
from pymongo import MongoClient
客戶端對象: 鏈接mongod
數據庫對象: use 數據庫
集合對象: 選擇了集合
遊標對象: 查找之後獲得的對象
客戶端對象
client = MongoClient(host=ip,port=port) 注意是host
client.database_names() 獲取數據庫列表
數據庫對象
db = client.數據庫名字 或者 client[數據庫名字]
db.collection_names() 獲取集合列表
db.create_collection(集合名) 創建集合
db.drop_collection(集合名) 刪除集合
db.name 查看所屬數據庫
db.authenticate(user,pwd) 權限認證
集合對象
col = db.集合名 或者 db[集合名]
col.name 查看所屬的集合名
插入
col.insert_one(data) 插入單條數據:字典
col.insert_many(data) 插入多條數據:字典列表
col.insert(data) 單,多都可
刪除
col.delete_one(條件) 刪除一條
col.delet_many(條件) 刪除多條
col.remove(query,multi) 根據條件刪除,multi決定數量
修改
col.update_one(query,update,upsert) 根據query查詢,更新成update,存在就修改不存在就插入
col.update_many(query,update,upsert) 修改多條
後記:對於大部分轉行的人來說,找機會把自己的基礎知識補齊,邊工作邊補基礎知識,真心很重要。
“我們相信人人都可以成為一個IT大神,現在開始,選擇一條陽光大道,助你入門,學習的路上不再迷茫。這裡是北京尚學堂,初學者轉行到IT行業的聚集地。"
遊標對象 只有查詢之後產生
col.find(條件) 返回遊標對象,可遍歷 <pymongo.cursor.cursor> /<pymongo.cursor.cursor>
col.find_one(條件) 返回一條數據
閱讀更多 火到沒朋友的大數據 的文章