啟動mongodb服務端 : sudo service mongod start 或者 sudo /usr/local/mongodb/bin/mongod --config /etc/mongodb.conf 停止mongodb服務端: sudo service mongodb stop 查詢mo ...
啟動mongodb服務端 : sudo service mongod start 或者 sudo /usr/local/mongodb/bin/mongod --config /etc/mongodb.conf
停止mongodb服務端: sudo service mongodb stop
查詢mongodb伺服器狀態命令查詢狀態
ps -ajx|grep mongod 或者 sudo systemctl status mongodb
資料庫操作
進入資料庫:mongo
顯示所有的資料庫:show databases ->show dbs
查看選手某個資料庫:db
資料庫切換(選擇和創建):use 資料庫名 ps: use test 預設是不會出現這個資料庫,除非創建集合才會出現
查看當前資料庫名稱:db
顯示集合:show collections ps:這裡的集合數據於mysql里的表
查看集合的數據:db.集合名.find({}) ps:db.student.find({}) 其中{}可以不寫
刪除資料庫:db.dropDatabase()
sql語句中的刪除資料庫:drop database test3;
退出資料庫:Ctrl+c或者exit
集合(表)操作
在某個資料庫裡面創建集合:db.createCollection(name, options)
name是要創建的集合的名稱
options是一個文檔,用於指定集合的配置 ,選項參數是可選的,所以只需要到指定的集合名稱.
ps: 創建集合,集合的名字叫students:db.createCollection("students")
查看當前資料庫的所有集合:show collections或者show tables
刪除集合: db.students.drop()
數據基本操作
插入數據:db.集合名稱.insert(document) 插入文檔時,如果不指定_id參數,MongoDB會為文檔分配一個唯一的ObjectId
insert,如果存在會報錯
ps: db.students.insert({"name":"gj",gender:1})
查看數據:db.students.find({})或者db.students.find()
也可以自己指定id:
ps:db.students.insert({id:"20180418","name":"gj",gender:1})
簡單查詢
查詢所有的數據:db.students.find()或者db.students.find({})
更新數據:
db.集合名稱.update(<query>,<update>,{upsert: <boolean>,multi: <boolean>})
參數query:查詢條件,類似sql語句update中where部分
參數update:更新操作符,類似sql語句update中set部分
參數upsert : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,預設是false,不插入。
參數multi:可選,預設是false,表示只更新找到的第一條記錄,值為true表示把滿足條件的文檔全部更新
ps:預設值更新一條數據,並且結構被修改 db.student.update({},{name:'mnc'})
預設值更新一條數據,只修改欄位,不破壞數據 db.stu.update({},{$set:{name:'mnc'}})
全文檔找更新找到的第一條,把{name:'hr'}對應的這條修改成{name:'mnc'},其他欄位全部丟掉
db.students.update({name:"hr"},{name:"mnc",gender:1})
指定屬性更新,通過操作符$set數據結構不會被破壞,也是只修改一條
db.students.update({"name":"mnc"},{$set:{gender:0}})
修改多條匹配到的數據:多條操作一定要配合$set,否則會報錯註意true和flase是小寫
ps:把所有的性別都修改成女生 db.students.update({},{$set:{gender:0}},{multi:true})
把所有的gj修改成“郭靖”,並且不破壞結構 db.students.update({"name":"gj"},{$set:{"name":"郭靖"}},{multi:true})
"$set"也可加引號:db.students.update({"name":"gj"},{"$set":{"name":"郭靖"}},{"multi":true})
方法findOne():查詢,只返回第一個文檔:db.集合名稱.findOne({條件文檔})
方法pretty():將結果格式化: db.集合名稱.find({條件文檔}).pretty()
保存:
db.集合名稱.save(document) 如果文檔的_id已經存在則修改,並且結構變化,如果文檔的_id不存在則添加註意,如果_id寫成是id,則會把id當成key
ps:db.students.save({"_id":"20180418","name":"張三","gender":1})
刪除:db.集合名稱.remove(<query>,{justOne: <boolean>})
參數query:可選,刪除的文檔的條件
參數justOne:可選,如果設為true或1,則只刪除一條,預設false,表示刪除多條
ps:只刪除匹配到的第一條 db.students.remove({"name" : "gj"},{"justOne":true})
全部刪除: db.students.remove({})
關於max的示例
ps:創建一個名為sub的定長集合,長度為5個位元組,可容納的文檔數為3
db.createCollection("sub",{"capped":true,size:5,max:3}) 這裡當插入的文檔數超過3時會自動替換前一個文檔
比較運算符
等於,預設是等於判斷,沒有運算符
小於$lt 電腦術語裡面是 less than,意思是小於,縮寫是lt
小於或等於$lte
大於$gt 對應 greater than,意思是大於,縮寫是gt ;
大於或等於$gte
不等於$ne 對應 Not equal to,意思是不等於,縮寫ne;
ps:查詢課時大於或等於2的學科 db.sub.find({"count":{"$gte":2}})
查找標題不是mongodb的學科 db.sub.find({'title':{'$ne':"mongodb"}})
邏輯運算符
查詢時可以有多個條件,多個條件之間需要通過邏輯運算符連接
邏輯與:預設是邏輯與的關係,多個條件直接用逗號連接
ps:查詢課時大於或等於10,並且標題為web的學科 db.sub.find({"count":{"$gte":10},"title":"web"})
邏輯或:使用$or
ps:查詢課時大於10,或標題為web的學科 db.sub.find({"$or":[{"count":{"$gt":10}},{"title":"web"}]})
範圍運算符--"$in":使用"$in","$nin" 判斷是否在某個範圍內
ps:查詢課時為8、14的學科 db.sub.find({"count":{"$in":[8,14]}})
查詢課時不為8、14的學科 db.sub.find({"count":{"$nin":[8,14]}})
Limit與Skip:
db.集合名稱.find().limit(NUMBER), 參數NUMBER表示要獲取文檔的條數, 如果沒有指定參數或者0則顯示集合中的所有文檔
方法limit():用於讀取指定數量的文檔 ps: 查詢2條信息 db.sub.find({}).limit(2)
方法skip():用於跳過指定數量的文檔
db.集合名稱.find().skip(NUMBER) 參數NUMBER表示跳過的記錄條數,預設值為0
ps:查詢從第3條開始的學生信息 db.stu.find().skip(2)
limit()和skip()一起使用:
ps: 從第二條開始,並且只要三條 db.sub.find().skip(2).limit(3)
MongoDB與python交互:
創建客戶端:
#無安全認證: client = MongoClient('localhost', 27017) client = MongoClient('mongodb://localhost:27017/資料庫名稱') client = MongoClient('mongodb://localhost:27017/test1') #有安全認證: client = MongoClient('mongodb://用戶名:密碼@localhost:27017/資料庫名稱') client = MongoClient('mongodb://t1:123@localhost:27017/test1')
代碼實現:
from pymongo import MongoClient client = MongoClient("mongodb://localhost:27017/test1") #得到名字叫test1的資料庫 test1 = client['test1'] #也可以寫成 test1 = client.test1 #得到名字叫t1的集合 t1 = test1['t1'] #也可寫成 t1 = test1.t1 #要插入的數據 s1 = {"name":"郭靖","age":18} s = t1.insert_one(s1)
更新數據:
s = t1.update_one({"name":"郭靖"},{"$set":{"name":"黃蓉"}})
刪除數據:
s1 = t1.delete_one({'name':'黃藥師'})
查找數據:
s1 = t1.find_one({'name':'黃蓉'})
#查找所有數據 t1.find()