經常使用數據庫4 mongodb

知識內容:web

1.mongodb介紹與基本使用sql

2.mongodb操做mongodb

 

 

 

1、mongodb介紹與基本使用數據庫

1.mongodb介紹數組

Mongodb是一款強大,靈活,且易於擴展的通用型數據庫。它能擴展出很是多的功能,如二級索引,範圍查詢,排序,聚合,以及地理空間索引。MongoDB做爲文檔數據庫,支持複雜的關係存儲,更適合如今的web2.0時代服務器

易於使用:session

  Mongodb是一個面向文檔的數據庫,而不是關係數據庫,不採用關係模型主要是爲了得到更好的擴展性,還有一些其餘的好處。與關係型數據庫相比,面向文檔的數據庫再也不用行的概念,取而代之的是更爲靈活的「文檔(document)」,經過在文檔中嵌入文檔和數組,面向文檔的方法可以僅使用一條記錄來表現複雜的層次關係,這與使用現代面嚮對象語言的開發者對數據的見解一致。app

易於擴展:dom

  MongoDB的設計是採用橫向擴展。面向文檔的數據模型使他能很容易地在多臺服務器之間進行數據分割。MongoDB能自動處理跨集羣的數據和負載,自動從新分配文檔,以及將用戶請求路由到正確的機器上。函數

豐富的功能:

  • 索引   MongoDB支持通用二級索引,容許多種快速查詢,且提供惟一索引,複合索引,地理空間索引,以及全文索引
  • 聚合   MongoDB支持聚合管道,用戶能經過簡單的片斷建立複雜的聚合,並經過數據庫自動優化。
  • 特殊的集合類型   MongoDB支持存在時間有限的集合,適用於那些存在某個時刻過時的數據,如會話(session),相似地,MongoDB也支持固定大小的集合,用於保存近期數據,如日誌。
  • 文件存儲   MongoDB支持一種很是易用的協議,用於存儲大文件和文件元數據。

 

 

2.mongodb安裝及鏈接數據庫

(1)下載

下載mongodb數據庫服務端及mongodb數據庫管理軟件robomongo

 

(2)安裝

就跟安裝普通軟件同樣,robomongo本身去設置安裝位置,Windows系統安裝mongodb完後以下:

 

(3)運行服務器

在命令行中運行服務器程序 mongod.exe  出現以下錯誤

 

出現如下錯誤是由於缺乏數據文件目錄,按照上面的提示到C盤下新建data目錄,而後再在data目錄下新建db目錄再從新運行程序,出現如下提示所有勾選上

成功運行服務器,如今正等待鏈接:

 

(4)鏈接服務器(鏈接數據庫)

打開以前安裝的robomongo軟件,而後點擊create 建立鏈接並點擊save便可,而後選中鏈接並點擊connect便可鏈接上數據庫

鏈接上以後:

 

 

 

2、mongodb操做

1.鏈接數據庫建立表(document)並插入數據

代碼:

 1 ""
 2 注意,須要安裝 pymongo 這個庫
 3 pip3 install pymongo
 4 
 5 在你安裝並開啓 mongo 以後,就可使用 pymongo 來鏈接使用 mongodb 了
 6 """
 7 import pymongo
 8 import random
 9 
10 # 鏈接 mongo 數據庫, 主機是本機, 端口是默認的端口
11 client = pymongo.MongoClient("mongodb://localhost:27017")
12 print("成功鏈接數據庫", client)
13 
14 # 設置要使用的數據庫
15 mongodb_name = 'mongo_demo'
16 # 直接這樣就使用數據庫了,至關於一個字典 -> 若是沒有會自動建立 不須要咱們本身去建立 (表也是同樣)
17 # 下面這一句也能夠這樣寫: db = client.mongo_demo
18 db = client[mongodb_name]
19 
20 
21 # 插入數據
22 # ===
23 # mongo 中的 document 至關於 sqlite 中的 table
24 # 不須要定義,直接使用
25 # 不限定每條數據的字段
26 # 直接插入新數據,數據以字典的形式提供
27 # 下面的例子中, user 是文檔名(表名),不存在的文檔會自動建立
28 # 每一個數據有一個自動建立的字段 _id,能夠認爲是 mongo 自動建立的主鍵
29 
30 def insert():
31     u = {
32         'name': 'wyb',
33         'note': 'admin',
34         '隨機值': random.randint(0, 3),
35     }
36     db.user.insert(u)
37 
38 
39 insert()

運行一次上述代碼,刷新robomongo,以下:

 

 

2.查詢數據

 1 import pymongo
 2 
 3 # 鏈接 mongo 數據庫, 主機是本機, 端口是默認的端口
 4 client = pymongo.MongoClient("mongodb://localhost:27017")
 5 print("成功鏈接數據庫", client)
 6 
 7 # 設置要使用的數據庫
 8 mongodb_name = 'mongo_demo'
 9 db = client[mongodb_name]
10 
11 
12 # 查找數據 -> find
13 # find 返回一個可迭代對象,使用 list 函數轉爲數組
14 def find():
15     user_list = list(db.user.find())
16     print('全部用戶: ')
17     for item in user_list:
18         print(item)
19 
20 find()
21 
22 # find 能夠傳入參數來作條件查詢
23 # 具體能夠很複雜 這裏只演示簡單的
24 # 查詢隨機值爲 1 的全部數據
25 def find1():
26     # 查詢 隨機值 等於1 的全部數據
27     query = {
28         '隨機值': 1,
29     }
30     print('random 1: ', list(db.user.find(query)))
31 
32     # 查詢 隨機值 等於1 而且 name等於xxx  的全部數據
33     query = {
34         '隨機值': 1,
35         'name': 'xxx',
36     }
37     print('random 1 and name xxx: ', list(db.user.find(query)))
38 
39     # 查詢 隨機值 大於 1 的全部數據
40     query = {
41         '隨機值': {
42             '$gt': 1
43         },
44     }
45     print('random > 1', list(db.user.find(query)))
46 
47     # $or 查詢
48     query = {
49         '$or': [
50             {
51                 '隨機值': 2,
52             },
53             {
54                 'name': 'xxx'
55             }
56         ]
57     }
58     print('or 查詢', list(db.user.find(query)))
59 
60     # $gt -> 大於
61     # 此外還有 $lt $let $get $ne $or 等條件
62     # $lt -> 小於     $let -> 小於等於    $get -> 大於等於    $ne -> 不等於     $or -> 兩種狀況中至少知足一種
63 
64 
65 find1()
66 
67 
68 # 部分查詢(指定區域)
69 # 部分查詢, 至關於 select xx, yy from 表名 語句
70 def find_condition():
71     query = {}
72     field = {
73         # 字段: 1 表示提取這個字段
74         # 不傳的 默認是 0 表示不提取
75         'name': 1
76     }
77     print('部分查詢,只查詢name: ', list(db.user.find(query, field)))
78 
79 
80 find_condition()

 

 

3.更新、刪除數據

 1 import pymongo
 2 import random
 3 
 4 # 鏈接 mongo 數據庫, 主機是本機, 端口是默認的端口
 5 client = pymongo.MongoClient("mongodb://localhost:27017")
 6 print("成功鏈接數據庫", client)
 7 
 8 # 設置要使用的數據庫
 9 mongodb_name = 'mongo_demo'
10 db = client[mongodb_name]
11 
12 
13 # 更新數據
14 # 默認更新第一條查詢到的數據
15 def update():
16     # 查找參數
17     query = {
18         '隨機值': 1,
19     }
20     # 修改參數
21     form = {
22         '$set': {
23             'name': '更新後的name',
24         }
25     }
26     # db.user.update(query, form)
27     # 若是想要更新全部查詢到的數據
28     # 須要加入下面的參數 {'multi': True}
29     options = {
30         'multi': True,
31     }
32     # 下面這一句至關於 db.user.update(query, form, multi=True)
33     db.user.update(query, form, **options)
34 
35 
36 # update()
37 
38 
39 # 刪除
40 # ===
41 # 刪除和 find 是同樣的
42 # db.user.remove()

 

 

4.注意

  • 在程序中不會直接使用mongodb這些底層的操做,而是進行了封裝,將底層邏輯封裝成函數,就像上面同樣
  • 另外在程序中不會使用mongodb的原生數據庫的刪除,而是在數據庫中的數據加一個字段"_deleted",該字段默認爲False,刪除就是將這個字段置爲True
  • 另外mongodb中的document(至關於表)中的字段不限制,能夠隨意添加任何不存在的字段,也就是說表中任意兩項的字段能夠是不同的
 1 # select_all 是給用戶使用的查詢函數 
 2 # 若是一個數據是被刪除了的,那麼這個數據的_delected字段就爲True,那麼這個數據就不會被查詢到
 3 def select_all():
 4     query = {
 5         '_deleted': False,
 6     }
 7     user_list = list(db.user.find(query))
 8     res = []
 9     for u in user_list:
10         u.pop('_deleted')   # 去掉_delected屬性
11         us.append(u)        # 把數據加入結果列表中 
12     print('全部用戶', len(res), res)
13 
14 # select_all()
相關文章
相關標籤/搜索