1指令操作
1.1.操作mongodb數(shù)據(jù)庫
- 創(chuàng)建數(shù)據(jù)庫
語法:use數(shù)據(jù)庫名
注意:如果數(shù)據(jù)庫不存在則創(chuàng)建數(shù)據(jù)庫,否則切換到指定的數(shù)據(jù)庫
注意:如果剛剛創(chuàng)建的數(shù)據(jù)庫不在列表內(nèi),如果要顯示它毡咏,我們需要向剛剛創(chuàng)建的數(shù)據(jù)庫中插入一些數(shù)據(jù)
( db.star.insert({name:"tom", age:18, gender:1,address:"北京", isDelete:0}) ) - 刪除數(shù)據(jù)庫
前提:使用當前數(shù)據(jù)庫(use 數(shù)據(jù)庫名)
db.dropDatabase() - 查看所有數(shù)據(jù)庫
show dbs - 查看當前正在使用的數(shù)據(jù)庫
a、db
b、db.getName() - 斷開連接
exit - 查看命令api
help
1.2.集合操作
- 查看當前數(shù)據(jù)庫下有哪些集合
show collections - 創(chuàng)建集合
a、
語法:db.createCollection("集合名")
示例:db.createCollection("class")
b反惕、
語法:db.集合名.insert(文檔)
示例:db.student.insert({name:"tom", age:18, gender:1,address:"北京", isDelete:0})
區(qū)別:兩者的區(qū)別在于前者創(chuàng)建的是一個空的集合,后者創(chuàng)建一個空的集合并添加一個文檔 - 刪除當前數(shù)據(jù)庫中的集合
語法:db.集合名.drop()
示例:db.class.drop() - 【注】MongoDB中添加數(shù)據(jù)演侯,字段可以不一樣
1.3.文檔操作
-
插入文檔
- a姿染、使用insert()方法插入文檔
語法:db.集合名.insert(文檔)
插入一個:db.student.insert({name:"劉歡", age:19,address:"北京", isDelete:0})
語法:db.集合名.insert([文檔1, 文檔2, ……, 文檔n])
插入多個:db.student.insert([{name:"馬德華", age:17,address:"北京", isDelete:0},{name:"鳳凰女", age:20,address:"上海", isDelete:0}]) - b、使用save()方法插入文檔
語法:db.集合名.save(文檔)
說明:如果不指定_id字段蚌本,save()方法類似于insert()方法盔粹。如果指定_id字段,則會更新_id字段的數(shù)據(jù)
示例1:db.student.save({name:"科比", age:22,address:"洛杉磯", isDelete:0})
示例2:db.student.save({_id:ObjectId("59950962019723fe2a0d8d17"),name:"姚明", age:23,address:"休斯頓", isDelete:0})
如果id存在程癌,更新數(shù)據(jù)舷嗡,不存在添加數(shù)據(jù)
- a姿染、使用insert()方法插入文檔
-
文檔更新
- a、update()方法用于更新已存在的文檔
db.集合名.update(
query, # 查詢條件
update, # 更新什么
{ # 附加功能
upsert:<boolean>,
multi:<boolean>
}
)
參數(shù)說明:
query:update的查詢條件嵌莉,類似于sql里update語句內(nèi)where后面的內(nèi)容
update:update的對象和一些更新的操作符(inc)等进萄,inc在原有的基礎(chǔ)上累加后更新
upsert:可選锐峭,如果不存在update的記錄中鼠,是否當新數(shù)據(jù)插入,true為插入沿癞,F(xiàn)alse為不插入援雇,默認為false
multi:可選,mongodb默認是false椎扬,只更新找到的第一條記錄惫搏,如果這個參數(shù)為true,就按照條件查找出來的數(shù)據(jù)全部更新需求:將劉德華的年齡更新為25
示例:
db.student.update({name:"劉德華"},{$set:{age:25}})
累加:db.student.update({name:"劉德華"},{$inc:{age:25}})
全改:db.student.update({name:"劉德華"},{$set:{age:42}},{multi:true})
- b、save()方法通過傳入的文檔替換已有文檔
必須有_id這個鍵才是更新
語法:
db.集合名.save(
document
)
參數(shù)說明:
document:文檔數(shù)據(jù)
1.3.文檔刪除
- 說明:在執(zhí)行remove()函數(shù)前蚕涤,先執(zhí)行find()命令來判斷執(zhí)行的條件是否存在是一個良好習(xí)慣
- 也可以使用查詢中的and和or
語法:
db.集合名.remove(
query,
{
justOne:<boolean>
}
)
參數(shù)說明:
query:可選筐赔,刪除的文檔的條件
justOne: 可選,如何為true獲取1揖铜,則只刪除一個文檔
示例:db.student.remove({name:"劉德華"})
1.4.文檔查詢
- a茴丰、find()方法
語法:db.集合名.find()
查詢集合下所有的文檔(數(shù)據(jù)):db.student.find() - b、find()方法查詢指定列
語法:db.集合名.find(
query,
{
<key>:1,
<key>:1
}
)
參數(shù)說明:
query:查詢條件
key:要顯示的字段天吓,1表示顯示
示例:
查詢指定條件贿肩,只顯示name和age
db.student.find({isDelete:0},{name:1,age:1})
查詢所有只顯示name和age鍵值
db.student.find({},{name:1,age:1}) - c、pretty()方法驛格式方式來顯示文檔
示例:db.student.find().pretty()
其實就是字典形式顯示 - d龄寞、findOne()方法查詢匹配結(jié)果的第一條數(shù)據(jù)
示例:db.student.findOne({isDelete:0})
1.5.查詢條件操作符
作用:條件操作符用于比較兩個表達式并從Mongodb集合中獲取數(shù)據(jù)
a尸曼、大于 - $gt greater than
語法:db.集合名.find({<key>:{$gt:<value>}})
示例:db.student.find({age:{$gt:20}})
b、大于等于 - $gte equal
語法:db.集合名.find({<key>:{$gte:<value>}})
c萄焦、小于 - $lt less than
語法:db.集合名.find({<key>:{$lt:<value>}})
d控轿、小于等于 - $lte
語法:db.集合名.find({<key>:{$lte:<value>}})
e、大于等于 和 小于等于 - $gte 和 $lte
語法:db.集合名.find({<key>:{$gte:<value>,$lte:<value>}})
f拂封、等于 - :
語法:db.集合名.find({<key>:<value>})
g茬射、使用_id進行查詢
語法:db.student.find({"_id":ObjectId("id值")})
示例:db.student.find({"_id":ObjectId("5995084b019723fe2a0d8d14")})
h、查詢某個結(jié)果集的數(shù)據(jù)條數(shù)
db.student.find().count()
i冒签、查詢某個字段的值當中是否包含另一個值
語法:
示例:db.student.find({name:/love/}) 包含love
j在抛、查詢某個字段的值是否以另一個值開頭
示例:db.student.find({name:/^li/}) 開頭
示例:db.student.find({name:/li$/}) 結(jié)尾
1.6.條件查詢and和or
- a、AND條件
語法:db.集合名.find({條件1,條件2,……,條件n})
示例:db.student.find({isDelete:0,age:{$gt:16}})
- b萧恕、OR條件
語法:
db.集合名.find(
{
$or:[{條件1},{條件2},……,{條件n}]
}
)
示例:db.student.find({$or:[{age:17},{age:{$gte:20}}]})
- c刚梭、AND和OR聯(lián)合使用
語法:
db.集合名.find(
{
條件1,
條件2,
$or:[{條件3},{條件4}]
}
)
sex是女
age>30
height=160 or height=158
db.star.find({sex:'女',age:{$gt:30},$or:[{height:160},{height:158}]})
1.7.limit肠阱、skip
limit 偏移量,數(shù)量 ---- 20條數(shù)據(jù)朴读,每頁顯示4條
- a屹徘、limit(): 讀取指定數(shù)量的數(shù)據(jù)記錄
db.student.find().limit(3) - b、skip():跳過指定數(shù)量的數(shù)據(jù)
db.student.find().skip(3) - c衅金、skip與limit聯(lián)合使用
通常用這種方式來實現(xiàn)分頁功能
示例:db.student.find().skip(3).limit(3)
20條數(shù)據(jù)噪伊,每頁顯示4條,直接得到第三頁所有數(shù)據(jù)
db.star.find().skip((3-1)*4).limit(4)
1.8.排序
語法:db.集合名.find().sort({<key>:1|-1})
示例:db.student.find().sort({age:1})
注意:1表示升序,-1表示降序
db.star.find({sex:'女'}).sort({age:1,height:-1})
先按照年齡升序排列氮唯,然后按照身高降序排列
2.可視化操作
通過可視化工具Robo軟件進行操作
3.pygame代碼操作
3.1.導(dǎo)入pymongo
pip install pymongo
from pymongo import MongoClient
3.2.連接服務(wù)器
端口號 27017
連接MongoDB
連接MongoDB我們需要使用PyMongo庫里面的MongoClient鉴吹,一般來說傳入MongoDB的IP及端口即可,第一個參數(shù)為地址host惩琉,第二個參數(shù)為端口port豆励,端口如果不傳默認是27017。
conn = MongoClient("localhost")
MongoClient(host='127.0.0.1',port=27017)
3.3.連接數(shù)據(jù)庫
db = conn.數(shù)據(jù)庫名稱
連接集合
collection = db[collection_name]
or
collection = db.collection_name
查看全部集合名稱
db.collection_names()
3.4.插入數(shù)據(jù)
- (1) 插入一條數(shù)據(jù)
db.user.insert({"name":"小剛","age":18,"hobby":"學(xué)習(xí)"}) - (2) 插入多條數(shù)據(jù)
db.user.insert([{"name":"小剛","age":18,"hobby":"學(xué)習(xí)"},{"name":"xxxoo","age":48,"hobby":"學(xué)習(xí)"}] - (3) 在3.x以上 建議 使用
insert_one 插入一條數(shù)據(jù)
insert_many() 插入多條數(shù)據(jù) - (4) 返回 id 使用insert_one()或者insert_many()
ret.inserted_id
ret.inserted_ids 得到其 _id
3.5.查詢數(shù)據(jù)
- (1) 查詢所有
db.user.find()
帶條件的查詢
data = db.user.find({"name":"周日"})
print(data) #返回result類似一個生成器 可以使用 next方法 一個一個 的取出來
print(next(data)) #取出一條數(shù)據(jù) - (2) 查詢一條
db.user.find_one() - (3) 帶條件查詢 db.user.find({"name":"張三"})
- (4) 查詢 id
from bson.objectid import ObjectId* #用于ID查詢
data = db.user.find({"_id":ObjectId("59a2d304b961661b209f8da1")}) - (5) 模糊查詢
(1){"name":{'$regex':"張"}}
(2)import re {'xxx':re.compile('xxx')} - (2)import re {'xxx':re.compile('xxx')}
(6) sort 排序
年齡 大于10
data = db.user.find({"age":{"gt":10}}).sort("age",-1) #年齡 降序 查詢 pymongo.DESCENDING --降序 - (7) limit 取值
取三條數(shù)據(jù)
db.user.find().limit(3)
data = db.user.find({"age":{"$gt":10}}).sort("age",-1).limit(3) - (8) count 統(tǒng)計數(shù)據(jù)條數(shù)
db.user.find().count() - (9) skip 從第幾條數(shù)據(jù)開始取
db.user.find().skip(2)
3.6.修改
update()方法其實也是官方不推薦使用的方法瞒渠,在這里也分了update_one()方法和update_many()方法肆糕,用法更加嚴格,
- (1) update()
db.user.update({"name":"張三"},{"$set":{"age":25}})
db.user.update({"name":"張三"},{"$inc":{"age":25}})
- (2) update_one() 第一條符合條件的數(shù)據(jù)進行更新
db.user.update_one({"name":"張三"},{"$set":{"age":99}}) - (3) update_many() 將所有符合條件的數(shù)據(jù)都更新
db.user.update_many({"name":"張三"},{"$set":{"age":91}}) - (4) 返回結(jié)果是UpdateResult類型
然后調(diào)用matched_count和modified_count屬性分別可以獲得匹配的數(shù)據(jù)條數(shù)和影響的數(shù)據(jù)條數(shù)
print(result.matched_count, result.modified_count)
3.7.刪除
刪除操作比較簡單在孝,直接調(diào)用remove()方法指定刪除的條件即可诚啃,符合條件的所有數(shù)據(jù)均會被刪除,
- (1) 刪除 lilei
collection.remove({"name":"lilei"}) - (2) 全部刪除
collection.remove() - (3) 依然存在兩個新的推薦方法
delete_one()和delete_many()方法私沮,示例如下:
delete_one()即刪除第一條符合條件的數(shù)據(jù)
collection.delete_one({“name”:“ Kevin”})
delete_many()即刪除所有符合條件的數(shù)據(jù)始赎,返回結(jié)果是DeleteResult類型
collection.delete_many({“age”: {'$lt':25}}) - (4) 可以調(diào)用deleted_count屬性獲取刪除的數(shù)據(jù)條數(shù)。
result.deleted_count
3.8.關(guān)閉連接
conn.close()
4.crontab指令
crontab 詳解
計劃任務(wù)
應(yīng)用場景:
要求你每天晚上備份一下你的數(shù)據(jù)庫仔燕,凌晨4點
每隔一分鐘抓取一次你競爭對手的網(wǎng)站造垛,建立情報
4.1. crontav -e
給當前用戶添加調(diào)度任務(wù)
新建任務(wù)調(diào)度指令
編寫腳本 /out.sh
#!/bash/sh
cd /
ls -l > /1.txt
編寫任務(wù)腳本定時執(zhí)行這個shell腳本
crontab文件的格式:M H D m d cmd
分鐘:0-59 每分鐘使用* 或者 */1
小時:0-23
日期:1-31
月份:1-12
星期:0-6 0表示星期天
#分鐘 小時 日期 月份 星期 指令
17 12 9 4 6 /out.sh 4月9號12點17并且是星期六執(zhí)行指令
43 21 * * * 每天的21:43執(zhí)行指令
0 17 * * 1 每周一的17點執(zhí)行指令
4 4 1 * * 每月1號4:4執(zhí)行指令
0 21 * * 1-6 周一到周六每天21:00執(zhí)行指令
2 8-20/3 * * * 8:02/11:02/14:02/17:02/20:02 執(zhí)行
30 5 1,5 * * 每月1號和5號的5:30執(zhí)行
*/1 * * * *