芒果数据库
MongoDB數(shù)據(jù)庫常用語句
1. 數(shù)據(jù)庫級常用操作
use databaseName # 使用庫 / 創(chuàng)建庫,不會(huì)立即創(chuàng)建,當(dāng)需要等到插入數(shù)據(jù)時(shí)數(shù)據(jù)庫才會(huì)創(chuàng)建 show dbs # 查看系統(tǒng)中的數(shù)據(jù)庫 db.dropDatabase() # 刪除數(shù)據(jù)庫2. 集合常用操作
db.createCollection(collection_name) # 創(chuàng)建名字為collection_name的集合 db.collection_name.insert(...) # 插入文檔,如集合不存在則自動(dòng)創(chuàng)建 show collections # 查看庫中的集合 show tables db.collection.drop() # 刪除集合 db.collection.renameCollection("new_name") # 重命名集合db.collection.insert() # 插入文檔 db.collection.save() # 插入文檔 db.class0.insertOne({name:"Levi",age:20,sex:'m'}) # 插入一條文檔 db.class0.insertMany([{name:"John"},{name:"Lenzer"}]) # 插入多條文檔3. 文檔常用操作
db.collection.find() # 同SQL ----> select * from table find(query,field) # query 查找條件,相當(dāng)于where子句# field 查找的域, 0不顯示,1顯示 db.class0.findOne({sex:'w'},{_id:0,name:1}) # 查詢滿足條件的第一條文檔用于query的特殊操作符: 比較操作符: $eq 等于 == ; $lt 小于 < ; $lte 小于等于 <=; $in 包含 $ne 不等于 !=; $gt 大于 > ; $gte 大于等于 >=; $nin 不包含邏輯操作符: $and 邏輯與; $or 邏輯或; $not 邏輯非; $nor Array數(shù)組相關(guān): $all e.g. db.class.find({score:{$all:[49,67]}},{_id:0}) 查找同時(shí)包含49 67的文檔 $size e.g. db.class1.find({score:{$size:2}},{_id:0}) 查找score中包含兩個(gè)元素的文檔 $slice e.g. db.class1.find({},{_id:0,score:{$slice:2}}) 顯示數(shù)組前兩項(xiàng)其他常用查找操作符: $exists e.g. db.class1.find({sex:{$exists:false}},{_id:0}) 查找不存在sex域的文檔,true:存在,false:不存在 $mod e.g. db.class1.find({age:{$mod:[2,1]}},{_id:0}) 找出年齡為單數(shù)的文檔 $type e.g. db.class1.find({name:{$type:2}},{_id:0}) 查找name域值類型為2的文檔查找結(jié)果的操作函數(shù): distinct(filed) db.class0.distinct('age') 獲取某個(gè)域的值,去重 pretty() db.class0.find().pretty() 格式化顯示查詢結(jié)果 limit(n) db.class0.find({},{_id:0}).limit(3) 顯示查詢結(jié)果前三條 skip(n) db.class0.find({},{_id:0}).skip(5) 跳過前5條文檔,顯示后面的查詢結(jié)果 count() db.class0.find({sex:'w'},{_id:0}).count() 統(tǒng)計(jì)性別為w的文檔個(gè)數(shù) sort({field: 1/-1}) db.class0.find({},{_id:0}).sort({age:-1}) 查找結(jié)果按照降序排序 remove(query,justOne) db.class1.remove({sex:{$exists:false}}) 刪除所有不存在sex域的文檔justOne=true db.class1.remove({sex:'w'},true) 刪除第一條性別為w的文檔 db.class1.remove({}) 刪除class1中所有文檔update(query,update,upsert,multi) query 篩選條件 用法同findupdate 要修改成什么內(nèi)容 通常配合修改操作符(修改器)使用upsert 布爾值,默認(rèn)是false 如果query沒有篩選到文檔則不做任何操作如果設(shè)置為true 則如果query沒有篩選到匹配文檔則根據(jù)query和update內(nèi)容插入新的文檔multi 布爾值 默認(rèn)false 表示如果有多條符合條件文檔則只修改第一條如果設(shè)置為true則表示修改所有符合條件文檔 db.class0.update({name:'Tom'},{$set:{age:18}}) 將Tom的年齡修改為18修改器: $set e.g. db.class0.update({name:'Lily'},{$set:{age:17}}) Lily年齡修改為17 $unset e.g. db.class0.update({name:'Abby'},{$unset:{sex:''}}) 刪除Abby的sex域,sex后為空字符串 $rename e.g. db.class0.update({},{$rename:{sex:'gender'}},false,true) 將sex域名改為gender $setOnInsert e.g. $inc e.g. db.class0.update({},{$inc:{age:1}},false,true) 所有人年齡加1 $mul e.g. db.class0.update({},{$mul:{age:0.5}},false,true) 所有人年齡乘以0.5 $min e.g. db.class0.update({name:'Levi'},{$min:{age:20}}) Levi age如果大于20則修改為20 $max e.g. db.class0.update({name:'Lenzer'},{$max:{age:19}}) 如果Lenzer age 小于19則改為19數(shù)組修改器: $push e.g. db.class1.update({name:'小紅'},{$push:{score:91}}) 給小紅 score數(shù)組中添加一項(xiàng)91 $pushAll e.g. db.class1.update({name:'小喬'},{$pushAll:{score:[94,10]}}) 給小喬 score數(shù)組中添加多項(xiàng) $pull e.g. db.class1.update({name:'小紅'},{$pull:{score:78}}) 從小紅 score數(shù)組中刪除一項(xiàng)78 $pullAll e.g. db.class1.update({name:'小喬'},{$pullAll:{score:[92,10]}}) 從小喬 score數(shù)組中刪除多項(xiàng) $each e.g. db.class1.update({name:'小喬'},{$push:{score:{$each:[99,10]}}}) 分別插入99 10 $position e.g. db.class1.update({name:'小明'},{$push:{score:{$each:[67],$position:1}}}) 將67 插入到數(shù)組1號(hào)位置 $sort e.g. db.class1.update({},{$push:{score:{$each:[],$sort:-1}}},false,true) 將所有score域的數(shù)組降序排序 $pop e.g. db.class1.update({name:'小明'},{$pop:{score:-1}}) 刪除小明score中第一項(xiàng),1:最后一項(xiàng),-1:第一項(xiàng) $addToSet e.g. db.class1.update({name:'小剛'},{$addToSet:{score:81}}) 如果數(shù)組中沒有81 則添加81時(shí)間數(shù)據(jù)類型
# mongo中存儲(chǔ)時(shí)間大多為 ISODate new Date() e.g. db.class2.insert({book:'Python入門',date:new Date()}) 自動(dòng)生成當(dāng)前時(shí)間 ISODate() e.g. db.class2.insert({book:'Python精通',date:ISODate()}) 自動(dòng)生成當(dāng)前時(shí)間db.class2.insert({book:'Python崩潰',date:ISODate("2018-07-01 11:15:56")} 指定時(shí)間 Date() e.g. db.class2.insert({book:'Python瘋狂',date:Date()}) 將系統(tǒng)時(shí)間轉(zhuǎn)換為字符串 valueOf() e.g. db.class2.insert({book:'Python涅槃',date:ISODate().valueOf()}) 獲取當(dāng)前標(biāo)準(zhǔn)時(shí)間時(shí)間戳4.索引
db.class0.ensureIndex({name:1}) 根據(jù)name域創(chuàng)建索引(1:正序索引,-1:逆序索引) db.class0.ensureIndex({age:1},{name:'ageIndex'}) 對age域創(chuàng)建索引命名ageIndex db.collection.getIndexes() 查看集合中索引 db.class0.dropIndex({name:1}) 刪除索引,根據(jù)鍵值對 db.class0.dropIndex('ageIndex') 刪除索引,根據(jù)索引名 db.collection.dropIndexes() 刪除所有索引索引類型: db.class0.ensureIndex({name:1,age:-1},{name:'name_age'}) 復(fù)合索引 db.class0.ensureIndex({name:1},{unique:true}) 唯一索引 db.class0.ensureIndex({age:1},{sparse:true}) 稀疏索引(間隙索引) 只對有age域的文檔創(chuàng)建索引5.聚合操作
db.collection.aggregate() # 聚合條件 ---》 聚合操作符 db.class0.aggregate({$group:{_id:'$gender',num:{$sum:'$age'}}}) # $group 分組聚合 需要配合具體的分組統(tǒng)計(jì)選項(xiàng) $sum : 求和# $avg : 求平均數(shù), $max 求最大值,$min 求最小值 db.class0.aggregate({$project:{_id:0,name:1,age:1}}) # $project 修改文檔的顯示效果 db.class0.aggregate({$match:{age:{$gt:18}}}) # $match 數(shù)據(jù)篩選 過濾年齡大于18歲的數(shù)據(jù)文檔 db.class0.aggregate({$limit:3}) # $limit 篩選前幾條文檔 db.class0.aggregate({$skip:3}) # $skip 跳過幾條文檔顯示 db.class0.aggregate({$sort:{age:1}}) # 將數(shù)據(jù)排序聚合管道: 將上一個(gè)聚合的操作結(jié)果給下一個(gè)聚合繼續(xù)操作 db.collection.aggregate([{聚合},{},{}...]) db.class0.aggregate([{$match:{gender:'m'}},{$project:{_id:0}},{$sort:{age:1}}]) # match --> project --> sort6.固定集合
mongodb中可以創(chuàng)建大小固定的集合,稱之為固定集合
特點(diǎn): 能夠淘汰早期數(shù)據(jù)
?????????????插入和順序查找速度更快
?????????????可以控制集合的空間大小
使用: 臨時(shí)緩沖
?????????????日志處理
7. pymongo
安裝: sudo pip3 install pymongo
conn = pymongo.MongoClient('localhost',27017) # 1.創(chuàng)建數(shù)據(jù)庫連接對象 db = conn.stu # 2.生成數(shù)據(jù)庫對象 myset = db.class0 # 3.生成集合對象# 4. 集合操作 (增刪改查索引聚合) conn.close() # 關(guān)閉數(shù)據(jù)庫連接 增:insert() insert_many() insert_one() save() 查:find() find_one() 改:update(query,update,upsert=False,multi=False) update_many() update_one() 刪:remove(query,multi = True)cursor = db.class0.find() cursor.hasNext() # 查看是否有下一個(gè)結(jié)果 cursor.next() # 獲取下一個(gè)結(jié)果游標(biāo) cursor 屬性: next() limit() skip() count() sort()數(shù)據(jù)庫的備份和恢復(fù)
備份 mongodump -h host -d dbname -o bak
恢復(fù) mongorestore -h dbhost:port -d dbname path
總結(jié)
- 上一篇: MongoDB(芒果数据库)学习(一)—
- 下一篇: centos 安装mysql时错误unk