本人最近使用新接觸python的pymongo模組連線mongoldb來進行資料操作。第一次接觸,可以說是屢屢碰壁,現對於一些問題進行總結。
言歸正傳。
先引入pymongo模組和mongoclient,連線mongo還有一種方法是連connection,但可能版本問題,本人引入後報錯不存在,這裡暫且不論。
import pymongo
from pymongo import mongoclient
然後就是老套路了哈哈哈,此處***為你mongodb的位址,可以是本地,也可以是遠端。yyy是你的資料庫名字。sss就是你連線的collection的名字啦~
client = mongoclient(
"***")
db = client.yyy
col = db.session
當然,為了容錯性更好,你也可以這麼寫:(我這裡是把報錯打成json包返回)
client = mongoclient(
"***")
error = {}
if notclient:
error["errormsg"]="failed"returnjson.dumps(error)
else:db = client.yyy
col = db.sss
這裡需要了解一點,就是col是你所連的聚集,你可能聚集裡面還有很多的記錄,這些記錄都有個唯一的objectid型別的_id。你可以通過_id來指定你要訪問的某個記錄集insert怎麼用我就不做介紹了,大家自行baidu或google。
然而我在寫**時,遇見這樣乙個問題: }
}比如我想把這段資料錄進資料庫裡面,如果這段東西都是你錄,那很好辦。你直接以json格式把資料錄進去就好。然而當你遇見,乙個人先建立好了這條記錄集,它已經具有了系統自動附加的_id,而且甚至這個人已經寫了"teacher":"mrwang"的這條字段,需要你新增student標籤下的字段,這咋辦?insert在這裡是不適用的,因為它是插入(或者說建立更好)乙個新的記錄集,並且系統也會給定乙個唯一的_id。
於是這裡需要用到update了!這也是pymongo很神奇的地方。它可以update來更改記錄,如果update的記錄沒有找到相應key值,它會自動建立相應字段~~然而這裡還是遇見了乙個問題:student標籤下又分成grades,再分成math,english等。這裡其實解決辦法也很容易,利用符號"."來分級。
綜上,**如下:
col.update(,})
col.update(,})
依此類推即可。
如果你的客戶需求很謹慎,想要提高容錯性,他希望student標籤下的內容一定要由你建立,如果你在插入student欄位前,發現已經有了student標籤,你需要報錯。這樣的需求不只需要update,因為update的功能是:如果有相應字段,它就把相應欄位update,如果沒有相應字段,它就建立相應欄位並update。其實這個很容易解決:
error={}
v=col.find_one()
ifv.has_key('student'):error["errormsg"]="failed"returnjson.dumps(error)else:
col.update(,})
就是先利用find_one返回dict格式資料,再用python的dict中的has_key判斷是否有student這個標籤就好啦~~~
先寫這麼多,以後遇見新的問題再寫。希望對初學者有幫助。因為本人也是初次接觸python,感覺python確實強大,大家有空也可以學學。知乎上一句話咋說的來著:程式設計師世界裡第一重要是english,第二重要是python。雖然是句玩笑,但足以體現了python的強大。233333~~~
關於pymongo的一些說明
問題 一 在pymongo中使用find是得到1個游標物件的,如果你想實現mongodb shell中find操作,例如 db.test.find 在pymongo中需要使用find one方法而不是find方法 print db.test.find one print db.test.find 0...
關於面試的一些問題
面試過程中,面試官會向應聘者發問,而應聘者的回答將成為面試官考慮是否接受他的重要依據。對應聘者而言,了解這些問題背後的 貓膩 至關重要。本文對面試中經常出現的一些典型問題進行了整理,並給出相應的回答思路和參 讀者無需過分關注分析的細節,關鍵是要從這些分析中 悟 出面試的規律及回答問題的思維方式,達到...
關於Labview的一些問題
第一章 虛擬儀器及 labview入門 1 虛擬儀器概述 虛擬儀器 virtual instrumention 是基於計算機的儀器。計算機和儀器的密切結合是目前儀器發展的乙個重要方向。粗略地說這種結合有兩種方式,一種是將計算機裝入儀器,其典型的例子就是所謂智慧型化的儀器。隨著計算機功能的日益強大以及...