bulk inserts插入多個文件
querying for more than one document訪問多個文件
counting文件計數方法
range queries限定訪問範圍
indexing增加索引
資料庫的操作無非是要掌握資料庫的增,改,刪,此篇文章為查閱官方文件的翻譯和解釋。
官方文件:tutorial — pymongo 3.7.1 documentation
已經安裝了pymongo,並且import pymongo
沒有報錯
(pymongo安裝:在cmd中輸入pip3 install pymongo
)
連線mongodb例項的客戶端
1.from pymongo import mongoclient
client = mongoclient()沒有新增引數時,會連線預設的使用者和埠
2.但是可以指定使用者和埠client = mongoclient('localhost', 27017)
3.或者用mongodb uri 形式
client = mongoclient('mongodb://localhost:27017/')
db = client.test_database
如果資料庫名稱不能直接用客戶端.資料名的方式引用,如test-database
那就使用字典的方式引用:db = client['test-database']
集合(collection)是mongodb中的一系列檔案,可以理解為關聯式資料庫中的乙個表。得到collection和得到資料庫的操作是一樣的
collection = db.test_collection
或者collection = db['test-collection']
注:1.從getting a database和getting a collection中可以看出,你要先得到乙個資料庫(db是得到的資料庫,collection是得到的集合),才能得到資料庫中的集合。2.一旦有文件插入的時候集合和資料庫就被建立
mongodb中的資料都是以json的形式儲存和展現的,使用pymongo時是用字典展示文件的
import datetime
post =
把乙個文件插入乙個集合中使用 insert_one()
>>> posts = db.posts
#insert_one插入文件,並用inserted_id得到id屬性
>>> post_id = posts.insert_one(post).inserted_id
>>> post_id
objectid('...')
如果你要插入的文件字典中沒有」_id」這個鍵,它會為你自動生成」_id」鍵和對應的值,每個文件都有自己特別的id。如圖,橢圓中的是每個文件的_id,矩形中的表示乙個文件
注:只要插入了第乙個文件集合就隨之建立通過「資料庫名.collection_names()」方法可以檢視資料庫中所有的集合
>>> db.collection_names(include_system_collections=false)
[u'posts']
得到單個文件的方法find_one(),結果返回none或者相匹配的文件
>>>
import pprint
#沒有已知資訊匹配,返回了剛剛插入的posts
>>> pprint.pprint(posts.find_one())
#用已知資訊"author": "mike"做匹配
>>> pprint.pprint(posts.find_one())
>>> post_id#文件id,見inserting a document
objectid(...)
>>> pprint.pprint(posts.find_one())
>>> post_id_as_str = str(post_id)#文件id可轉化為字串形式,但是不能用該形式匹配文件
>>> posts.find_one() # no result沒有返回結果
>>>
如果有str型別的id務必在使用find_one方法前改為objectid型別
from bson.objectid import objectid
# the web framework gets post_id from the url and passes it as a string
defget
(post_id):
# convert from string to objectid:
document = client.db.collection.find_one()
使用insert_many()方法,多個文件以列表的形式插入
#列表new_posts中有兩個字典元素,乙個字典表示乙個文件
>>> new_posts = [,
... ]
>>> result = posts.insert_many(new_posts)
>>> result.inserted_ids
[objectid('...'), objectid('...')]
find()方法
#無引數輸入時,列印出該集合所有文件
>>>
for post in posts.find():
... pprint.pprint(post)
...
#有參輸入時,只列印匹配文件
>>>
for post in posts.find():
... pprint.pprint(post)
...
#此方法可計算乙個集合所含的文件數
>>> posts.count()
3
#此方法計算集合中滿足匹配條件的文件數
>>> posts.find().count()
2
>>> d = datetime.datetime(2009, 11, 12, 12)
#"$lt"表示限定範圍 sort()表示由操作者來分類
>>>
for post in posts.find(}).sort("author"):
... pprint.pprint(post)
...
#增加索引,並且是獨一無二的
>>> result = db.profiles.create_index([('user_id', pymongo.ascending)],
... unique=true)
#顯示現有的索引,乙個是自動新增的_id,乙個是手動增加的索引user_id
>>> sorted(list(db.profiles.index_information()))
[u'_id_', u'user_id_1']
>>> user_profiles = [
... ,
... ]
>>> result = db.profiles.insert_many(user_profiles)
>>> new_profile =
>>> duplicate_profile =
>>> result = db.profiles.insert_one(new_profile) # this is fine.
>>> result = db.profiles.insert_one(duplicate_profile)#有重複user_id則報錯
traceback (most recent call last):
duplicatekeyerror: e11000 duplicate key error index: test_database.profiles.$user_id_1 dup key:
Core Foundation 官方文件翻譯
core foundation框架中常用的隱含型別 使用這些隱含型別時需要自己初始化,自己去釋放記憶體。所以需要記住,在初始化的同時在相應位置釋放。以防出現記憶體問題。1.cfstringref 其他方法用的時候可以檢視文件 void testcfstringref 2 cfarrayref,還有很...
Docker 官方文件翻譯
docker compose 是利用docker來執行多個容器的工具。利用compose 在乙個檔案中定義多個容器,然後利用乙個單獨的命令,可以執行你所想做的任何事情。compose 能較好的作為開發環境的假設,伺服器腳手架以及ci方面的應用。我們不推薦使用在生產環境中。使用compose 需要一下...
voltdb官方文件翻譯 一)
最近研究voltdb,發現網上的資料很少。但是官網的文件講述的還是挺清楚的。所以就把看後的觀點記錄下來,方便後來人,廢話不多說,進入正題。首先,voltdb是什麼。它是一款記憶體資料庫,號稱實現了acid和事務隔離,快速解決大資料量和大併發量的秒級相應。本人實際使用了一下感覺還是蠻好的。因為volt...