MongoDB

1.定義

MongoDB 是一個基於分佈式文件存儲的數據庫。由 C++ 語言編寫。旨在爲 WEB 應用提供可擴展的高性能數據存儲解決方案。python

MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。mysql

能夠理解爲sql

它和咱們使用的關係型數據庫最大的區別就是約束性,能夠說文件型數據庫幾乎不存在約束性,理論上沒有主外鍵約束,沒有存儲的數據類型約束等等mongodb

關係型數據庫中有一個 "表" 的概念,有 "字段" 的概念,有 "數據條目" 的概念數據庫

MongoDB中也一樣有以上的概念,可是名稱發生了一些變化,嚴格意義上來講,二者的概念即爲類似,但又有些出入,不過無所謂,咱們就當是以上概念就好啦json

 

2.安裝

安裝完成以後,開始進入配置環節,首先咱們要進入目錄: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窗口關了,否則你還得從新打開一次

 

3.基本命令

*****使用了不存在的對象即建立了該對象*****

查看有多少個數據庫
show dbs

 

查看當前正在使用數據庫
db
#test是測試數據庫

 

切換(建立)數據庫(若是沒有會默認建立,可是是建立在內存上,若是寫入了數據,數據庫就存到磁盤上了)
use locals

 

建立一張表
db.user

 

插入一條數據(此時數據庫和表纔會到磁盤上)
db.user.insert({})

 

查看當前數據庫存在磁盤上的數據表
show tables

 

4.數據增刪改查

(1).mysql與mongodb的比較

 

這樣的數據在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

(2).增刪改查

語法
庫.表.增/刪/改/查

增 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}})#刪除列表中的第一條數據

(3)$字符(存儲符合條件的元素下標索引)

db.user.updateOne({'hobby':'hj'},{$set:{'hobby.$':'喝酒'}})  #修改列表中的某一個,先從列表中找到hj,找到hj的全部爲0,$暫爲爲0,只改第一個符合條件的,updateMany也是隻改第一個符合條件的

數學比較符

$gt:大於
db.user.find({"age":{%gt:73}})

$gte:大於等於
$lt:小於
$lte:小於等於
$eq:等於 

5.數據類型

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字節是計數器

6.array與object

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}}})

7.跳過,選取,排序

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(內置優先級)

8.NoSQLBoolster for MongoDB(圖形化工具)的使用

9.用pymongo操做mongodb

查全部,返回可迭代對象

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」); 

10.建立新用戶

建立新用戶
db.createUser({user:"shy",pwd:"111111",roles:[{role:"readWrite",db:"test"}]})  #用戶的權限爲可讀可寫

使用新用戶
 db.auth("shy","19960926abc")

 

相關文章
相關標籤/搜索