非關系型數據庫mongodb入門(一步一步 版)

本文主要內容: 1.簡要介紹mongodb 2.Pymongo 3.mongo shell 4.我的mongodb入門之旅 1.簡要介紹mongodb MongoDB是一個基于分布式文件存儲的數據庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。MongoDB是一個介于關系數據庫和非關系數

本文主要內容:

1.簡要介紹mongodb

2.Pymongo

3.mongo shell

4.我的mongodb入門之旅

1.簡要介紹mongodb

MongoDB是一個基于分布式文件存儲的數據庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。MongoDB是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bjson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。園里有博友的介紹寫的比較詳細,還介紹了mongo的安裝

2.Pymongo

在說pymongo之前,先看看一篇博文,特別適合有數據庫操作經驗的看:

PyMongo 是 MongoDB 的 Python 接口開發包。

3.mongo shell

學mongo非常有必要學mongo shell

因為mongo shell 可以更加便捷的直接操作數據庫,特別適合檢查。

這里園里有一篇總結的挺好:

這個shell和Mongodb里的很多操作都有相似之處,不要孤立起來學

4.我的mongodb入門之旅

以上這些信息,我們不可能一開始就掌握,稍微有個大致的了解就行。

OK,下面開始我的mongo入門之旅了,香港服務器租用,這才是今天的重點

4.1  使用 mongo -port XXXX 登錄shell (由于服務器中的mongo端口已經更改了)

4.2  use test_for_new (建立一個新的數據庫,我在shell里沒找到建立的命令,試了下這個use命令,這個也能間接建立數據庫)

4.3  show dbs 顯示系統的數據庫名稱 和對應大小

   ? show collections 顯示當前使用的數據庫中的collections(應該是集合的意思),這個collection對應于關系數據庫中表。show tables 有同樣效果

   ? db 查看當前使用數據庫的名稱

4.4  同樣沒找到建立collections的現成命令,實驗后發現。這個數據庫的使用就和python里的變量一樣不需事先申明。

   ? 直接用就行了,沒有的話會自動建立??梢杂胐bs.collections的形式(像面向對象吧),例如:

   ? db.collection1.insert({a:1,b:1}) 怎一個爽字了得,服務器空間,這個{}可以理解成python里的dict。還有如果嫌命令太長,可以事先將

   ? coll=db.collection1 (賦值給一個臨時變量) coll.insert({a:1,b:1}) 這插入格式為什么是這樣,先放放 咱不急。

   ? 使用coll.find()就可以看到collection1的所有數據了,使用coll.drop()就可以刪除該collection及里面的數據了。那么多插一些數據到collection1吧

4.5  關于插入,必須要注意幾點。其一,因為是非關系的,所以不會嚴格限制格式,底層的存儲像dict 所以可以 coll.insert({a:1,b:1,c:1})

   ? 其二,即便你再coll.insert({a:1,b:1})一下,他也不會報錯,香港服務器,而且出來的是兩條該數據,不信的話用coll.find({a:1,b:1})試試

   ? 事實上系統會增加一個唯一標識字段“_id”用于區分數據

非關系型數據庫mongodb入門(一步一步 版)

    這點和versant數據庫到很像,有點面向對象的味道

4.6?????? 刪除a=1,b=1的數據

    coll.remove({a:1,b:1}) 注意了 刪的是倆條數據哦

4.7  將b=1的所有數據的a改成1

   ? coll.update({b:1},{$set:{a:1}})

4.8????? OK,增刪改查都有了 shell差不多就介紹這么多了。下面要用pymongo

    關于pymongo的介紹,我想沒必要再這樣一步一步來了,否則就有污蔑大眾智商的嫌疑了。直接給代碼吧,我盡量多寫些有意義的注釋。

pymongo PyConnect(object): (self, host, port): : 10 self.conn = pymongo.Connection(host, port) 11 except Error: %(host, port) 13 exit(0) (self): 16 self.conn.close() use(self, dbname): self.db = self.conn[dbname] setCollection(self, collection): self.db: exit(0) 27 else: 28 self.coll = self.db[collection] find(self, query = {}): type(query) is not dict: exit(0) 35 try: self.coll: : 40 result = self.coll.find(query) 41 except NameError: ,query 43 exit(0) 44 return result insert(self, data): dict: exit(0) self.coll.insert(data) remove(self, data): dict: exit(0) self.coll.remove(data) update(self, data, setdata): dict or type(setdata) is not dict: exit(0) self.coll.update(data,{:setdata}) == : , 27017) ) ) :10, :1}) 72 result = connect.find() :10, :1}, {:10}) x in result: x: ], x[], x[], x[] 78 else: ], x[], x[] :10})

非關系型數據庫mongodb入門(一步一步 版)

4.9  補充:在調用self.conn[dbname]和self.db[collection].find(query)的時候要是能再加個存在性判斷就好了,不然很容易出問題。

5.0  好了,本文到這里就結束了,最后留個問題。在以上代碼中最終輸出結果里為什么是a=10,b=10,而不是a=10,b=1

?

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享