1. 程式人生 > >python之mongodb學習

python之mongodb學習

python之mongodb學習


1.首先,先來介紹一下mongdb資料庫

MongoDB 是由C++語言編寫的,是一個基於分散式檔案儲存的開源資料庫系統。

在高負載的情況下,新增更多的節點,可以保證伺服器效能。

MongoDB 旨在為WEB應用提供可擴充套件的高效能資料儲存解決方案。

MongoDB 將資料儲存為一個文件,資料結構由鍵值(key=>value)對組成。MongoDB 文件類似於 JSON 物件。欄位值可以包含其他文件,陣列及文件陣列。

主要特點:

MongoDB 是一個面向文件儲存的資料庫,操作起來比較簡單和容易。
你可以在MongoDB記錄中設定任何屬性的索引 (如:FirstName=“Sameer”,Address=“8 Gandhi Road”)來實現更快的排序。
你可以通過本地或者網路建立資料映象,這使得MongoDB有更強的擴充套件性。
如果負載的增加(需要更多的儲存空間和更強的處理能力) ,它可以分佈在計算機網路中的其他節點上這就是所謂的分片。
Mongo支援豐富的查詢表示式。查詢指令使用JSON形式的標記,可輕易查詢文件中內嵌的物件及陣列。
MongoDb 使用update()命令可以實現替換完成的文件(資料)或者一些指定的資料欄位 。
Mongodb中的Map/reduce主要是用來對資料進行批量處理和聚合操作。
Map和Reduce。Map函式呼叫emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函式進行處理。
Map函式和Reduce函式是使用Javascript編寫的,並可以通過db.runCommand或mapreduce命令來執行MapReduce操作。
GridFS是MongoDB中的一個內建功能,可以用於存放大量小檔案。
MongoDB允許在服務端執行指令碼,可以用Javascript編寫某個函式,直接在服務端執行,也可以把函式的定義儲存在服務端,下次直接呼叫即可。
MongoDB支援各種程式語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
mongodb與mysql命令對比 傳統的關係資料庫一般由資料庫(database)、表(table)、記錄(record)三個層次概念組成,

我們簡單來說碩Mongodb的特點:
MongoDB是由資料庫(database)、集合(collection)、文件物件(document)三個層次組成。

MongoDB對於關係型資料庫裡的表,但是集合中沒有列、行和關係概念,這體現了模式自由的特點。


2.安裝使用mongodb資料庫
安裝的話,大家自行百度就ok了!!!
接下來我們開始使用mongodb
(1)引入pymongo並且建立連線

#引入模組
import pymongo
#建立連線(IP和埠)
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
#myclient = pymongo.MongoClient("localhost",27017)

3.建立資料庫
首先說明一下,mongodb不需要自己建立資料庫,可以直接使用的,可以自動建立的。

#mydb = myclient["test"]
#兩種方式都可以
mydb = myclient.test

4.建立集合
注意: 在 MongoDB 中,集合只有在內容插入後才會建立!也就是說,我們需要先建立集合(也就是資料表),再插入一條記錄,資料表才會真正建立。

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
#建立資料庫
mydb = myclient.testdb
#建立表
mycol = mydb.table

5.插入資料
有兩種插入資料的方法:save() VS insert()
但兩者是有兩個區別:
一、save函式實際就是根據引數條件,呼叫了insert或update函式.如果想插入的資料物件存在,insert函式會報錯,而save函式是改變原來的物件;如果想插入的物件不存在,那麼它們執行相同的插入操作.
二、insert可以一次性插入一個列表,而不用遍歷,效率高, save則需要遍歷列表,需要一個個插入。

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.testdb
mycol = mydb.table
#插入資料
mycol.insert({"name":'john','province':'浙江','age':24})

結果:
在這裡插入圖片描述
在MongoDB中,每條資料其實都有一個_id屬性來唯一標識。如果沒有顯式指明該屬性,MongoDB會自動產生一個ObjectId型別的_id屬性。insert()方法會在執行後返回_id值。
插入多條資料

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.insert
mycol = mydb.table
mycol.insert([{"name":'john','province':'浙江','age':24},
              {"name":'wangsan','province':'西安','age':12},
              {"name":'lisi','province':'陝西','age':22},
              ])

結果:
在這裡插入圖片描述
上面利用insert演示,但是官方推薦使用insert_one()和insert_many()方法來分別插入單條記錄和多條記錄。


6.查詢語句
插入資料後,可以利用find_one()或find()方法進行查詢,其中find_one()查詢得到的是單個結果,find()則返回一個生成器物件.
(1)查詢單條語句find_one

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.insert
mycol = mydb.table
mycol.insert([{"name":'john','province':'浙江','age':24},
              {"name":'wangsan','province':'西安','age':12},
              {"name":'lisi','province':'陝西','age':22},
              ])
resuit = mycol.find_one({"name":"wangsan"})
print(resuit);

結果:

{'_id': ObjectId('5bea02f229b57602d039f4eb'), 'name': 'wangsan', 'province': '西安', 'age': 12}

(2)查詢多條我們可以使用find語句

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.insert
mycol = mydb.table
mycol.insert([{"name":'john','province':'浙江','age':24},
              {"name":'wangsan','province':'西安','age':20},
              {"name":'lisi','province':'陝西','age':20},
              ])
resuit = mycol.find_one({"name":"wangsan"})
print(resuit);
#查詢多條
results = mycol.find({"age":20})
print(results)
for result in results:
    print(result)

結果:

{'_id': ObjectId('5bea02f229b57602d039f4eb'), 'name': 'wangsan', 'province': '西安', 'age': 12}
<pymongo.cursor.Cursor object at 0x00000000027504A8>
{'_id': ObjectId('5bea05e629b5761010ddd735'), 'name': 'wangsan', 'province': '西安', 'age': 20}
{'_id': ObjectId('5bea05e629b5761010ddd736'), 'name': 'lisi', 'province': '陝西', 'age': 20}

7.更新刪除
更新update

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.testdb
mycol = mydb.table
#更新name
mycol.update({'name':'john'},{'$set':{"name":"30"}})
#檢查是否更新
result = mycol.find_one({"name":"30"})
print(result)

結果:

{'_id': ObjectId('5be8c5b229b5760440220de3'), 'name': '30', 'province': '浙江', 'age': 24}

刪除remove

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.testdb
mycol = mydb.table
#刪除
mycol.remove({"name":"30"})
#檢查
result = mycol.find_one({"name":"30"})
print(result)

其他也可以參考:https://juejin.im/post/5addbd0e518825671f2f62ee