MongoDB 是一個基於分佈式文件存儲的數據庫。由 C++ 語言編寫。旨在爲 WEB 應用提供可擴展的高性能數據存儲解決方案。python
MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。mysql
能夠理解爲sql
它和咱們使用的關係型數據庫最大的區別就是約束性,能夠說文件型數據庫幾乎不存在約束性,理論上沒有主外鍵約束,沒有存儲的數據類型約束等等mongodb
關係型數據庫中有一個 "表" 的概念,有 "字段" 的概念,有 "數據條目" 的概念數據庫
MongoDB中也一樣有以上的概念,可是名稱發生了一些變化,嚴格意義上來講,二者的概念即爲類似,但又有些出入,不過無所謂,咱們就當是以上概念就好啦json
安裝完成以後,開始進入配置環節,首先咱們要進入目錄:windows
"C:\Program Files\MongoDB\Server\3.4\bin"數組
帶着你配置環境變量,讓X裝的更加天然更加美:安全
以後的操做,windows 7 與 windows 10 不太同樣,大同小異啦數據結構
windows 10 一路到底的"肯定"
windows 7 在這裏須要注意的是,Path路徑移動到最後,輸入:" ;C:\Program Files\MongoDB\Server\3.4\bin " 必定要帶上 " ; " 哦
由於沒有找到windows 7 操做系統的計算機,因此這裏只能給windows 7 的同窗說聲抱歉了
OK!到了這裏咱們基本已經完成了部分操做了
咱們來試一下成果吧
打開cmd窗口進行一次ZB的操做吧
那咱們來建立一個" C:\data\db\ "的目錄吧
好了目錄已經有了,再次ZB試一下
好了開啓成功了
那麼服務開啓了,客戶端怎麼去鏈接呢,這時咱們須要另外一個cmd窗口開啓mongo的客戶端
到此,咱們成功的完成了,服務端的部署開啓,還有客戶端的連接,若是你還想繼續往下學習的話,我給你一句金玉良言
千萬別把這兩個cmd窗口關了,否則你還得從新打開一次
*****使用了不存在的對象即建立了該對象*****
查看有多少個數據庫
show dbs
查看當前正在使用數據庫 db #test是測試數據庫
切換(建立)數據庫(若是沒有會默認建立,可是是建立在內存上,若是寫入了數據,數據庫就存到磁盤上了)
use locals
建立一張表
db.user
插入一條數據(此時數據庫和表纔會到磁盤上)
db.user.insert({})
查看當前數據庫存在磁盤上的數據表
show tables
這樣的數據在mongodb中存儲(存儲json的數據結構)
[{ "id":1, "name":"jwb", "age":73, }, { "id":2, "name":"ywb", "age":84, }]
特殊之處
[{ "id":1, "name":"jwb", "age":73, "hobby":[1,2],#能夠存列表 "duixiang":{ #至關於跨表 "id":2, "name":"ywb", "age":84, } }, { "id":2, "name":"ywb", "age":84, "duixiang":{ "id":1, "name":"jwb", "age":73, }, #hobby爲空能夠不寫 }]
mysql與mongodb的區別
mysql mongodb
數據庫 數據庫
表 collections
列 Field
row documents
庫.表.增/刪/改/查
增 insert
db.user.insert({"id":1,"name":"jwb","age":73}) db.user.insert([{"id":1,"name":"jwb","age":73},{"id":2,"name":"jwb","age":73}] 至關於 db.user.insertMany() 官方推薦(效率更高) 插入一條用:db.user.insert({}) 插入多條用:db.user.insertOne([{},{}])
查 find
db.user.find({}) #查全部 db.user.find_one({}) #查全部符合條件的數據中的一條 db.user.find({'id':2,"age":85}) #並列條件 $or #或條件 db.user.find({$or:[{'id':2},{"age":73}]}) $in #子集,至關於贊成字段的或 db.user.find('age':{$in:[73,84,86]}) db.user.find('age':{$in:[1,3,5,8]}) #字段是它的自子集或徹底本身均可以 $all #必須知足全部條件 db.user.find('age':{$all:[1,3,5,8]}) #[1,3]就檢索不出來了
改 update
db.user.update({"age":73},{$set:{"age":84}}) #將年齡爲73的改成84 db.user.update({"age":84},{$set:{"username":"jinjiaodawangba"}}) #將年齡爲84的字段的username改成jinjiaodawangba,若是username不存在,則建立 官方推薦 db.user.updateOne({},{$set:{}}) #更新全部符合條件的數據的第一條 db.user.updateMany({},{$set:{}}) #更新全部符合條件的數據
刪 remove
db.user.remove({"age":85}) #刪除年齡爲85的數據 官方推薦 db.user.deleteOne({'name':"jwb}) #刪除全部符合條件的數據的第一條 db.user.deleteMany({'name':"jwb}) #刪除全部符合條件的數據 清空全部數 db.user.deleteMany()
(1)$修改器
$set:暴力修改 $inc:引用增長 db.user.updateMany({},{$inc:{"age":1}}) #全部人的年齡+1(在原有值的基礎上+1) $unset:暴力刪除字段 db.user.updateOne({'name':"ywb"},{$unset:{"hobby":1}}) #暴力刪除名字爲ywb的hobby,後面的1是固定的
(2)array修改器
$push:增長元素 db.user.updateOne({'name':"ywb"},{$push:{"hobby":'jwb'}})#向列表中添加一個 $pull:刪除元素 db.user.updateOne({'name':"ywb"},{$pull:{"hobby":'jwb'}})#刪除列表中的jwb $pushAll:迭代增長 db.user.updateOne({'name':"ywb"},{$pullAll:{"hobby":[1,2]}})#向列表中迭代添加 $pop:刪除列表中的最後一條/第一條數據 db.user.updateOne({'name':"ywb"},{$pop:{"hobby":1}})#刪除列表中的最後一條數據 db.user.updateOne({'name':"ywb"},{$pop:{"hobby":-1}})#刪除列表中的第一條數據
db.user.updateOne({'hobby':'hj'},{$set:{'hobby.$':'喝酒'}}) #修改列表中的某一個,先從列表中找到hj,找到hj的全部爲0,$暫爲爲0,只改第一個符合條件的,updateMany也是隻改第一個符合條件的
數學比較符
$gt:大於 db.user.find({"age":{%gt:73}}) $gte:大於等於 $lt:小於 $lte:小於等於 $eq:等於
Object ID :Documents 自生成的 _id,與id相似,mongodb已經幫咱們作好了,就不用手動寫id了 String: 字符串,必須是utf-8 Boolean:布爾值,true 或者false (這裏有坑哦~在Python中 True False 首字母大寫) Integer:整數 (Int32 Int64 大家就知道有個Int就好了,通常咱們用Int32) Double:浮點數 (沒有float類型,全部小數都是Double) Arrays:數組或者列表,多個值存儲到一個鍵 (list哦,Python中的List哦) Object:學過Python了,那麼這個概念特別好理解,就是Python中的字典,這個數據類型就是字典 Null:空數據類型 , 一個特殊的概念,None Null Timestamp:時間戳 Date:存儲當前日期或時間unix時間格式 (咱們通常不用這個Date類型,時間戳能夠秒殺一切時間類型) 看着挺多的,可是真要是用的話,沒那麼複雜,很簡單的哦
Object Id詳細
"_id" : ObjectId("5b151f8536409809ab2e6b26") #"5b151f85" 代指的是時間戳,這條數據的產生時間 #"364098" 代指某臺機器的機器碼,存儲這條數據時的機器編號 #"09ab" 代指進程ID,多進程存儲數據的時候,很是有用的 #"2e6b26" 代指計數器,這裏要注意的是,計數器的數字可能會出現重複,不是惟一的 #以上四種標識符拼湊成世界上惟一的ObjectID #只要是支持MongoDB的語言,都會有一個或多個方法,對ObjectID進行轉換 #能夠獲得以上四種信息 #注意:這個類型是不能夠被JSON序列化的 這是MongoDB生成的相似關係型DB表主鍵的惟一key,具體由24個字節組成: 0-8字節是時間戳, 9-14字節的機器標識符,表示MongoDB實例所在機器的不一樣; 15-18字節的進程id,表示相同機器的不一樣MongoDB進程。 19-24字節是計數器
1.object操做 (1)db.user.updateOne({"kecheng.price":'python'},{'$inc.price':500}) #將課程字典中的price在原有的基礎上+500 (2)db.user.updateOne({"kecheng.price":'python'},{'$set.price':19800}) #將課程字典中的price暴力的改爲19800 2.array操做 db.user.update({"name":"路飛學城-騎士計劃"},{$set:{"price.0":5000}}) 3.array中的object db.user.updateOne({hobby.name":'jwb'},{'$set':{'hobby.$.age':84}}) 4.object中的array db.user.update({"kecheng.class":15},{$set:{"kecheng.class.$":20}}) 5.array中的array db.user.update({"name":"路飛學城-騎士計劃"},{$set:{"price.1.1":"d"}}) 6.object中的object db.user.update({"name":"路飛學城-騎士計劃"},{$set:{"other.count":{"python":111112}}})
db.user.find({}).limit(2) #只顯示兩條 db.user.find({}).skip(2) #跳過前兩條 分頁 db.user.find({}).skip(2).limit(2) #跳過前兩條,只顯示兩條 排序 db.user.find({}).sort({'age':-1}) #以age進行排序,-1是倒敘,1是升序 排序後分頁顯示 db.user.find({}).sort({'age':-1}).skip(2).limit(2) 優先級 sort>skip>limit(內置優先級)
查全部,返回可迭代對象
import pymongo import json mongoclient=pymongo.MongoClient(host='127.0.0.1',port=27017) MongoDB=mongoclient['locals'] res=MongoDB.user.find({}) for i in res: i["_id"]=str(i.get("_id")) #將object-id轉成字符串,不然不能序列化 json.dumps(i)
查符合條件中的一個,返回字典
import pymongo import json mongoclient=pymongo.MongoClient(host='127.0.0.1',port=27017) MongoDB=mongoclient['locals'] res=MongoDB.user.find_one({},{"age":0,'name':0}) #篩選 條件是不雅年齡和姓名爲0的 for i in res: i["_id"]=str(i.get("_id")) #將object-id轉成字符串,不然不能序列化 json.dumps(i)
增長,插入(一條)
import pymongo import json mongoclient=pymongo.MongoClient(host='127.0.0.1',port=27017) MongoDB=mongoclient['locals'] res=MongoDB.user.insert_one({'id':1,"age":5,'name':'shy'}) for i in res: i["_id"]=str(i.get("_id")) #將object-id轉成字符串,不然不能序列化 json.dumps(i) print(res.inserted_id) #獲取object_id
添加多個
import pymongo import json mongoclient=pymongo.MongoClient(host='127.0.0.1',port=27017) MongoDB=mongoclient['locals'] res=MongoDB.user.insert_many([{'id':1,"age":5,'name':'shy'},{'id':2,"age":5,'name':'shy'}]) for i in res: i["_id"]=str(i.get("_id")) #將object-id轉成字符串,不然不能序列化 json.dumps(i) print(res.inserted_ids) #獲取全部object_id
修改(只改符合條件的第一個)
import pymongo import json mongoclient=pymongo.MongoClient(host='127.0.0.1',port=27017) MongoDB=mongoclient['locals'] res=MongoDB.user.update_one({"age":55},{"$set":{'name':'shy'}}) for i in res: i["_id"]=str(i.get("_id")) #將object-id轉成字符串,不然不能序列化 json.dumps(i)
修改多個
import pymongo import json mongoclient=pymongo.MongoClient(host='127.0.0.1',port=27017) MongoDB=mongoclient['locals'] res=MongoDB.user.update_many({"age":55},{"$set":{'name':'shy'}}) for i in res: i["_id"]=str(i.get("_id")) #將object-id轉成字符串,不然不能序列化 json.dumps(i)
刪除(只改符合條件的第一個)
import pymongo import json mongoclient=pymongo.MongoClient(host='127.0.0.1',port=27017) MongoDB=mongoclient['locals'] res=MongoDB.user.delete_one({'id':1}) for i in res: i["_id"]=str(i.get("_id")) #將object-id轉成字符串,不然不能序列化 json.dumps(i)
刪除
import pymongo import json mongoclient=pymongo.MongoClient(host='127.0.0.1',port=27017) MongoDB=mongoclient['locals'] res=MongoDB.user.delete_many({'id':1}) for i in res: i["_id"]=str(i.get("_id")) #將object-id轉成字符串,不然不能序列化 json.dumps(i)
sort,limit,skip
import pymongo import json mongoclient=pymongo.MongoClient(host='127.0.0.1',port=27017) MongoDB=mongoclient['locals'] res=MongoDB.user.find({}).limit(5).skip(2) #跳過2個,只顯示5個 for i in res: i["_id"]=str(i.get("_id")) #將object-id轉成字符串,不然不能序列化 json.dumps(i)
import pymongo import json mongoclient=pymongo.MongoClient(host='127.0.0.1',port=27017) MongoDB=mongoclient['locals'] #res=MongoDB.user.find({}).sort({'age':1}) #sort的用法與mongodb不一樣了,後面能夠和limit,skip一塊兒用 res=MongoDB.user.find({}).sort('age':pymongo.DESCENDING) for i in res: i["_id"]=str(i.get("_id")) #將object-id轉成字符串,不然不能序列化 json.dumps(i)
根據ObjectId查詢時的注意
import pymongo import json mongoclient=pymongo.MongoClient(host='127.0.0.1',port=27017) MongoDB=mongoclient['locals'] s=ObjectId('d45fsd64f5dg4f5d6g54f6')#必定要轉成ObjectId類型才能夠用 res=MongoDB.user.find_one({'_id':s}) for i in res: i["_id"]=str(i.get("_id")) #將object-id轉成字符串,不然不能序列化
用戶相關 1、添加一個用戶 db.addUser(「name」); db.addUser(「userName」, 「pwd123」, true); 添加用戶、設置密碼、是否只讀 2、數據庫認證、安全模式 db.auth(「userName」, 「123123」); 3、顯示當前全部用戶 show users; 4、刪除用戶 db.removeUser(「userName」);
建立新用戶 db.createUser({user:"shy",pwd:"111111",roles:[{role:"readWrite",db:"test"}]}) #用戶的權限爲可讀可寫 使用新用戶 db.auth("shy","19960926abc")