關於pymongo的一些問題

2021-07-24 03:44:57 字數 2203 閱讀 3761

本人最近使用新接觸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 是基於計算機的儀器。計算機和儀器的密切結合是目前儀器發展的乙個重要方向。粗略地說這種結合有兩種方式,一種是將計算機裝入儀器,其典型的例子就是所謂智慧型化的儀器。隨著計算機功能的日益強大以及...