PyMongo官方文档翻译——VNPY
PyMongo是MongoDB數(shù)據(jù)庫的python模塊
VNPY默認(rèn)的數(shù)據(jù)庫,沒有采用SQL類型的數(shù)據(jù)庫,而是采用No-Sql類型的MongoDB數(shù)據(jù)庫,
對(duì)于想了解VNPY內(nèi)部結(jié)構(gòu)的童鞋,多多少少會(huì)遇到PyMongo的調(diào)用問題,雖然我個(gè)人不喜歡用數(shù)據(jù)庫的方式存儲(chǔ)證券行情數(shù)據(jù),這類高度結(jié)構(gòu)化的數(shù)據(jù),但為了重構(gòu)VNPY,使得使用HDF5或CSV代替MongoDB,我們還是需要了解一下該數(shù)據(jù)庫的調(diào)用方式,下面就給大家獻(xiàn)上一篇PyMongo的官方文檔的翻譯
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
本翻譯文檔包含以下內(nèi)容:
- 使用PyMongo插入數(shù)據(jù)
- 使用PyMongo查詢數(shù)據(jù)
- 使用PyMongo更新數(shù)據(jù)
- 使用PyMongo刪除數(shù)據(jù)
- 使用PyMongo進(jìn)行數(shù)據(jù)聚合
- 使用PyMongo創(chuàng)建索引
原文地址鏈接:https://docs.mongodb.com/manual/introduction/
PyMongo是一個(gè)用于MongoDB的Python工具,也是一個(gè)被推薦的Python操作MongoDB數(shù)據(jù)庫的方式。
使用步驟
安裝PyMongo
Linux或者OS X系統(tǒng)
你可以只用pip工具安裝:
pip install pymongoWindows系統(tǒng)下
使用Windows安裝工具,詳見https://pypi.python.org/pypi/pymongo/。
引入pymongo
在一個(gè)Python交互shell中完成此過程,或者也可以在其他Python環(huán)境中完成,例如Python腳本、Python模塊、Python項(xiàng)目。
從pymongo中引入MongoClicent。
from pymongo import MongoClient創(chuàng)建一個(gè)連接
使用MongoClient創(chuàng)建一個(gè)連接:
client = MongoClient()如果你沒有特別為MongoClient指定參數(shù),MongoClient將使用MongoDB默認(rèn)參數(shù)即localhost接口和27017端口。
你可以使用一個(gè)完整的MongoDB URI來定義連接:
client = MongoClient("mongodb://mongodb0.example.net:27019")這個(gè)MongoClient代表了一個(gè)運(yùn)行于mongodb.example.net端口號(hào)為27019的MongoDB連接。
訪問數(shù)據(jù)庫對(duì)象
第一個(gè)你用pymongo來交互的基本類是Database,它代表了MongoDB中的數(shù)據(jù)庫(database)結(jié)構(gòu)。數(shù)據(jù)庫保存了邏輯上相關(guān)的集合組。MongoDB將在第一次使用新的數(shù)據(jù)庫的時(shí)候自動(dòng)創(chuàng)建它。
你可以使用屬性訪問的方式,賦值一個(gè)數(shù)據(jù)庫(例如名字為primer)給本地變量db,如下所示:
db = client.primer你也可以使用字典形式訪問一個(gè)數(shù)據(jù)庫,這會(huì)移除Python特有的命名限制,如下所示:
db = client['primer']訪問集合對(duì)象
第二個(gè)你將使用pymongo進(jìn)行交互的基本類是Collection,它代表了MongoDB中的集合(collection)結(jié)構(gòu)。集合(collection)保存了邏輯上相關(guān)的文檔組。
你可以直接使用字典形式訪問集合或者通過一個(gè)訪問一個(gè)數(shù)據(jù)庫對(duì)象的屬性來訪問集合,如下所示:
db.dataset db['dataset']你也可以給一個(gè)變量進(jìn)行賦值,以在其他地方使用這個(gè)集合,如下所示:
coll = db.dataset coll = db['dataset']使用PyMongo插入數(shù)據(jù)
概覽
你可以使用insert_one()方法和insert_many()方法來向MongoDB的集合中插入文檔。如果你所插入的集合在MongoDB中不存在,MongoDB將為你自動(dòng)創(chuàng)建一個(gè)集合。
先決條件
在Python命令行或者IDLE中,使用MongoClient連接一個(gè)正在運(yùn)行的MongoDB實(shí)例,且已經(jīng)打開test數(shù)據(jù)庫。
from pymongo import MongoClientclient = MongoClient() db = client.test插入一個(gè)文檔
向集合restaurants中插入一個(gè)文檔。如果集合不存在,這個(gè)操作將創(chuàng)建一個(gè)新的集合。
from datetime import datetime result = db.restaurants.insert_one({"address": {"street": "2 Avenue","zipcode": "10075","building": "1480","coord": [-73.9557413, 40.7720266]},"borough": "Manhattan","cuisine": "Italian","grades": [{"date": datetime.strptime("2014-10-01", "%Y-%m-%d"),"grade": "A","score": 11},{"date": datetime.strptime("2014-01-16", "%Y-%m-%d"),"grade": "B","score": 17}],"name": "Vella","restaurant_id": "41704620"} )這個(gè)操作返回了一個(gè)InsertOneResult對(duì)象,它包括了insert_id屬性表示被插入的文檔的_id。訪問insert_id的方式如下:
result.inserted_id你插入的文檔的ObjectId將和如下所示的不同。
ObjectId("54c1478ec2341ddf130f62b7")如果你傳遞給insert_one()方法的參數(shù)不包含_id字段,MongoClient將自動(dòng)添加這個(gè)字段并且生成一個(gè)ObjectId設(shè)置為這個(gè)字段的值。
使用PyMongo查詢數(shù)據(jù)
概覽
你可以通過find()方法產(chǎn)生一個(gè)查詢來從MongoDB的集合中查詢到數(shù)據(jù)。MongoDB中所有的查詢條件在一個(gè)集合中都有一個(gè)范圍。
查詢可以返回在集合中的所有數(shù)據(jù)或者只返回符合篩選條件(filter)或者標(biāo)準(zhǔn)(criteria)的文檔。你可以在文檔中指定過濾器或者標(biāo)準(zhǔn),并作為參數(shù)傳遞給find()方法。
find()方法返回一個(gè)查詢結(jié)果的游標(biāo),這是一個(gè)產(chǎn)生文檔的迭代對(duì)象。
先決條件
本示例中使用test數(shù)據(jù)庫中的restaurants集合。與使用示例數(shù)據(jù)填充集合有關(guān)的介紹請(qǐng)見Import Example Dataset。
在Python命令行或者IDLE中,使用MongoClient連接一個(gè)正在運(yùn)行的MongoDB實(shí)例,且已經(jīng)打開test數(shù)據(jù)庫。
from pymongo import MongoClientclient = MongoClient() db = client.test在一個(gè)集合中查詢所有文檔
調(diào)用find()方式不需要傳值即可得到集合中所有的文檔。舉例來說,如下所示的操作即是返回restaurants集合中所有文檔。
cursor = db.restaurants.find()迭代游標(biāo)(cursor)并且打印文檔內(nèi)容。
for document in cursor:print(document)結(jié)果包含了所有restaurants集合中的所有文檔。
指定相等條件
對(duì)某一個(gè)字段的相等條件查詢有如下形式:
{ <field1>: <value1>, <field2>: <value2>, ... }如果字段(<field>)在某個(gè)文檔的某一個(gè)數(shù)組內(nèi),則使用點(diǎn)操作符(dot notation)去訪問該字段。
使用一個(gè)頂級(jí)字段進(jìn)行查詢
如下所示的操作將查詢borough字段等于Manhattan的文檔。
cursor = db.restaurants.find({"borough": "Manhattan"})迭代游標(biāo)(cursor)并且打印文檔內(nèi)容。
for document in cursor:print(document)結(jié)果將只包含符合條件的文檔。
在一個(gè)嵌入式的文檔中查詢
要指定嵌入文檔中的字段的查詢條件,需要使用點(diǎn)操作符。使用點(diǎn)操作符需要使用雙引號(hào)將字段名包裹。下面的操作將指定一個(gè)文檔的地址字典中的郵編字段的一個(gè)相等的條件。
cursor = db.restaurants.find({"address.zipcode": "10075"})迭代游標(biāo)(cursor)并且打印文檔內(nèi)容。
for document in cursor:print(document)結(jié)果將只包含符合條件的文檔。
更多的關(guān)于嵌入式文檔的查詢條件信息,請(qǐng)參閱https://docs.mongodb.com/manual/tutorial/query-documents/#read-operations-subdocuments。
在一個(gè)數(shù)組中查詢
grades數(shù)組包含一個(gè)嵌入式文檔作為其元素。在該文檔的字段上指定一個(gè)相等條件需要用到點(diǎn)操作符。使用點(diǎn)操作符需要使用雙引號(hào)將字段名包裹。如下所示的查詢將查詢一個(gè)有嵌入式文檔的grades字段,該字段中的grade等于B。
cursor = db.restaurants.find({"grades.grade": "B"})迭代游標(biāo)(cursor)并且打印文檔內(nèi)容。
for document in cursor:print(document)結(jié)果將只包含符合條件的文檔。
更多的關(guān)于數(shù)組內(nèi)查詢條件的信息,例如數(shù)組中特殊的混合條件,請(qǐng)參閱Array及$elemMatch操作符。
使用操作符指定條件
MongoDB支持使用操作符指定查詢條件,例如比較操作符。雖然這其中有一些例外,例如$or和$and條件操作符。使用操作符進(jìn)行查詢一般有如下形式:
{ <field1>: { <operator1>: <value1> } }完整的操作符列表請(qǐng)查閱query opeartors(http://docs.mongodb.org/manual/reference/operator/query)。
大于($gt)操作符
查詢字段grades包含一個(gè)嵌入式文檔,其中score大于30。
cursor = db.restaurants.find({"grades.score": {"$gt": 30}})迭代游標(biāo)(cursor)并且打印文檔內(nèi)容。
for document in cursor:print(document)結(jié)果將只包含符合條件的文檔。
小于($lt)操作符
查詢字段grades包含一個(gè)嵌入式文檔,其中score小于10。
cursor = db.restaurants.find({"grades.score": {"$lt": 10}})迭代游標(biāo)(cursor)并且打印文檔內(nèi)容。
for document in cursor:print(document)結(jié)果將只包含符合條件的文檔。
組合條件
你可以使用邏輯與(AND)或者邏輯或(OR)組合多個(gè)查詢條件。
邏輯與
你可以使用一個(gè)列表指定一個(gè)邏輯與條件查詢操作,使用逗號(hào)分隔條件。
cursor = db.restaurants.find({"cuisine": "Italian", "address.zipcode": "10075"}) bait_sessions = db_session.session.find({"$and":[{"classification_id":"pending"}, \{"bait_session.did_complete":True}]})?
迭代游標(biāo)(cursor)并且打印文檔內(nèi)容。
for document in cursor:print(document)結(jié)果將只包含符合條件的文檔。
邏輯或
你可以使用$or操作符進(jìn)行邏輯或條件的指定。
cursor = db.restaurants.find({"$or": [{"cuisine": "Italian"}, {"address.zipcode": "10075"}]})迭代游標(biāo)(cursor)并且打印文檔內(nèi)容。
for document in cursor:print(document)結(jié)果將只包含符合條件的文檔。
對(duì)結(jié)果進(jìn)行排序
要指定結(jié)果集的順序,可以通過追加sort()方法進(jìn)行查詢。給sort()方法傳遞需要排序的字段和配需類型等。
- pymongo.ASCENDING表示升序排序。
- pymongo.DESCENDING表示降序排序。
如果要通過多個(gè)鍵星星排序,可以傳遞鍵的列表和以及對(duì)應(yīng)的排序類型的列表。舉例來說,如下操作將返回restaurants集合中所有的文檔,并且先通過borough字段進(jìn)行升序排序,然后在每個(gè)borough內(nèi),通過"address.zipcode"字段進(jìn)行升序排序。
import pymongo cursor = db.restaurants.find().sort([("borough", pymongo.ASCENDING),("address.zipcode", pymongo.ASCENDING) ])迭代游標(biāo)(cursor)并且打印文檔內(nèi)容。
for document in cursor:print(document)結(jié)果將只包含符合條件且經(jīng)過排序的文檔。
使用PyMongo更新數(shù)據(jù)
概覽
你可以使用update_one()和update_many方法更新集合中的文檔。update_one()方法一次更新一個(gè)文檔。使用update_many()方法可以更新所有符合條件的文檔。方法接受以下三個(gè)參數(shù):
- 一個(gè)篩選器,可以對(duì)符合條件的文檔進(jìn)行更新。
- 一個(gè)指定的修改語句
- 自定義更新時(shí)的操作參數(shù)
要指定更新時(shí)的過濾器,使用和查詢條件時(shí)相同的結(jié)構(gòu)即可。參見使用PyMongo查詢數(shù)據(jù)獲取查詢條件的信息。
你不能更新_id字段。
先決條件
本示例中使用test數(shù)據(jù)庫中的restaurants集合。與使用示例數(shù)據(jù)填充集合有關(guān)的介紹請(qǐng)見Import Example Dataset。
在Python命令行或者IDLE中,使用MongoClient連接一個(gè)正在運(yùn)行的MongoDB實(shí)例,且已經(jīng)打開test數(shù)據(jù)庫。
from pymongo import MongoClientclient = MongoClient() db = client.test更新特定的字段
要改變一個(gè)特定字段的值,MongoDB提供了更新操作符,例如$set操作符可以修改值。例如$set之類的操作符將在沒有該字段的時(shí)候新建這個(gè)字段。可以查閱update operators作為參考。
更新頂級(jí)字段
如下操作將更新第一個(gè)符合name等于Juni這個(gè)條件的文檔。使用$set操作符更新cuisine字段且將lastModified修改為當(dāng)前日期。
result = db.restaurants.update_one({"name": "Juni"},{"$set": {"cuisine": "American (New)"},"$currentDate": {"lastModified": True}} )這個(gè)操作返回了一個(gè)UpdateResult對(duì)象。這個(gè)對(duì)象報(bào)告了符合條件的文檔數(shù)目以及被修改的文檔數(shù)目。
要查看符合篩選器條件的文檔數(shù)目,通過訪問UpdateResult對(duì)象的matched_count屬性。
result.matched_countmatched_count值為:
1要查看更新操作中被修改的文檔數(shù)目,通過訪問UpdateResult對(duì)象的modified_count屬性。
modified_count值為:
1更新嵌入式文檔中的字段
要更新一個(gè)嵌入式文檔中的字段,需要使用點(diǎn)操作符。當(dāng)使用點(diǎn)操作符時(shí),使用點(diǎn)操作符需要使用雙引號(hào)將字段名包裹。下面的操作將更新address字段中的street值。
result = db.restaurants.update_one({"restaurant_id": "41156888"},{"$set": {"address.street": "East 31st Street"}} )這個(gè)操作返回了一個(gè)UpdateResult對(duì)象。這個(gè)對(duì)象報(bào)告了符合條件的文檔數(shù)目以及被修改的文檔數(shù)目。
要查看符合篩選器條件的文檔數(shù)目,通過訪問UpdateResult對(duì)象的matched_count屬性。
result.matched_countmatched_count值為:
1要查看更新操作中被修改的文檔數(shù)目,通過訪問UpdateResult對(duì)象的modified_count屬性。
modified_count值為:
1更新多個(gè)文檔
update_one()方法更新了一個(gè)文檔,要更新多個(gè)文檔,需要使用update_many()方法。下面的操作將更新所有的address.zipcode等于10016以及cuisine等于Other的文檔,將cuisine字段設(shè)置為Category To Be Determined以及將lastModified更新為當(dāng)前日期。
result = db.restaurants.update_many({"address.zipcode": "10016", "cuisine": "Other"},{"$set": {"cuisine": "Category To Be Determined"},"$currentDate": {"lastModified": True}} )這個(gè)操作返回了一個(gè)UpdateResult對(duì)象。這個(gè)對(duì)象報(bào)告了符合條件的文檔數(shù)目以及被修改的文檔數(shù)目。
要查看符合篩選器條件的文檔數(shù)目,通過訪問UpdateResult對(duì)象的matched_count屬性。
result.matched_countmatched_count值為:
20要查看更新操作中被修改的文檔數(shù)目,通過訪問UpdateResult對(duì)象的modified_count屬性。
modified_count值為:
20替換一個(gè)文檔
要替換整個(gè)文檔(除了_id字段),將一個(gè)完整的文檔作為第二個(gè)參數(shù)傳給update()方法。替代文檔對(duì)應(yīng)原來的文檔可以有不同的字段。在替代文檔中,你可以忽略_id字段因?yàn)樗遣蛔兊摹H绻惆薩id字段,那它必須和原文檔的值相同。
重要:
在更新之后,該文檔將只包含替代文檔的字段。
在如下的更新操作后,被修改的文檔將只剩下_id、name和address字段。該文檔將不再包含restaurant_id、cuisine、grades以及borough字段。
result = db.restaurants.replace_one({"restaurant_id": "41704620"},{"name": "Vella 2","address": {"coord": [-73.9557413, 40.7720266],"building": "1480","street": "2 Avenue","zipcode": "10075"}} )replace_one操作返回了一個(gè)UpdateResult對(duì)象。這個(gè)對(duì)象報(bào)告了符合條件的文檔數(shù)目以及被修改的文檔數(shù)目。
要查看符合篩選器條件的文檔數(shù)目,通過訪問UpdateResult對(duì)象的matched_count屬性。
result.matched_countmatched_count值為:
20要查看更新操作中被修改的文檔數(shù)目,通過訪問UpdateResult對(duì)象的modified_count屬性。
modified_count值為:
20使用PyMongo刪除數(shù)據(jù)
概覽
你可以使用delete_one()以及delete_many()方法從集合中刪除文檔。方法需要一個(gè)條件來確定需要?jiǎng)h除的文檔。
要指定一個(gè)刪除條件,使用和查詢條件時(shí)相同的結(jié)構(gòu)即可。參見使用PyMongo查詢數(shù)據(jù)獲取查詢條件的信息。
先決條件
本示例中使用test數(shù)據(jù)庫中的restaurants集合。與使用示例數(shù)據(jù)填充集合有關(guān)的介紹請(qǐng)見Import Example Dataset。
在Python命令行或者IDLE中,使用MongoClient連接一個(gè)正在運(yùn)行的MongoDB實(shí)例,且已經(jīng)打開test數(shù)據(jù)庫。
from pymongo import MongoClientclient = MongoClient() db = client.test步驟
刪除所有符合條件的文檔
下面的操作將刪除所有復(fù)合條件的文檔。
result = db.restaurants.delete_many({"borough": "Manhattan"})這個(gè)操作返回了一個(gè)DeleteResult對(duì)象。這個(gè)對(duì)象報(bào)告了被刪除的文檔數(shù)目。
要查看被刪除的文檔數(shù)目,通過訪問DeleteResult對(duì)象的deleted_count屬性。
result.deleted_countdeleted_count值為:
10259如果你已經(jīng)插入或者更新了文檔,那么你得到的結(jié)果將和示例不同。
刪除所有文檔
要?jiǎng)h除一個(gè)集合中的所有文檔,給delete_many()方法傳遞一個(gè)空的條件參數(shù)即可。
result = db.restaurants.delete_many({})這個(gè)操作返回了一個(gè)DeleteResult對(duì)象。這個(gè)對(duì)象報(bào)告了被刪除的文檔數(shù)目。
要查看被刪除的文檔數(shù)目,通過訪問DeleteResult對(duì)象的deleted_count屬性。
result.deleted_countdeleted_count值為:
15100如果你已經(jīng)插入或者更新了文檔,那么你得到的結(jié)果將和示例不同。
銷毀一個(gè)集合
刪除所有文檔的操作只會(huì)清空集合中的文檔。該集合以及集合的索引將依舊存在。要清空一個(gè)集合,銷毀該集合以及它的索引并且重建集合和索引可能是相比于清空一個(gè)集合更加高效的操作方式。使用drop()方法可以銷毀一個(gè)集合,包括它所有的索引。
db.restaurants.drop()使用PyMongo進(jìn)行數(shù)據(jù)聚合
概覽
MongoDB可以進(jìn)行數(shù)據(jù)聚合操作,例如可以針對(duì)某一字段進(jìn)行分組或者對(duì)某一字段不同的值進(jìn)行統(tǒng)計(jì)。
使用aggregate()方法可以使用基于步驟的聚合操作。appregate()方法接受多個(gè)數(shù)組作為每一步的操作。每一個(gè)階段按照順序處理,描述了對(duì)數(shù)據(jù)操作的步驟。
db.collection.aggregate([<stage1>, <stage2>, ...])先決條件
這部分的例子使用了test數(shù)據(jù)庫中的restaurants集合。需要查看在集合中填充的實(shí)例數(shù)據(jù),請(qǐng)參閱Import Example Dataset。
在Python命令行或者IDLE中,使用MongoClient連接一個(gè)正在運(yùn)行的MongoDB實(shí)例,且已經(jīng)打開test數(shù)據(jù)庫。
from pymongo import MongoClientclient = MongoClient() db = client.test根據(jù)一個(gè)字段分組文件并計(jì)算總數(shù)
使用$group操作符去利用一個(gè)指定的鍵進(jìn)行分組。在$group操作中,指定需要分組的字段為_id。$group通過字段路徑訪問字段,該字段需要有一個(gè)美元符號(hào)$作為前綴。$group操作可以使用累加器對(duì)本次分組進(jìn)行計(jì)算。下面的例子將使用borough字段對(duì)restaurants集合進(jìn)行操作,并且使用$sum累加器進(jìn)行文檔的統(tǒng)計(jì)計(jì)算。
cursor = db.restaurants.aggregate([{"$group": {"_id": "$borough", "count": {"$sum": 1}}}] )迭代游標(biāo)(cursor)并且打印文檔內(nèi)容。
for document in cursor:print(document)結(jié)果將由如下文檔組成:
{u'count': 969, u'_id': u'Staten Island'} {u'count': 6086, u'_id': u'Brooklyn'} {u'count': 10259, u'_id': u'Manhattan'} {u'count': 5656, u'_id': u'Queens'} {u'count': 2338, u'_id': u'Bronx'} {u'count': 51, u'_id': u'Missing'}_id字段包含了不同的borough值,即根據(jù)鍵的值進(jìn)行了分組。
篩選并分組文檔
使用$match操作來刪選文檔。$match使用MongoDB查詢語法。下面的管道使用$match來對(duì)restaurants進(jìn)行一個(gè)borough等于"Queens"且cuisine等于Brazilian的查詢。接著$group操作對(duì)命中的文檔使用address.zipcode字段分組并使用$sum進(jìn)行統(tǒng)計(jì)。$group通過字段路徑訪問字段,該字段需要有一個(gè)美元符號(hào)$作為前綴。
cursor = db.restaurants.aggregate([{"$match": {"borough": "Queens", "cuisine": "Brazilian"}},{"$group": {"_id": "$address.zipcode", "count": {"$sum": 1}}}] )迭代游標(biāo)(cursor)并且打印文檔內(nèi)容。
for document in cursor:print(document)結(jié)果將由如下文檔組成:
{u'count': 1, u'_id': u'11368'} {u'count': 3, u'_id': u'11106'} {u'count': 1, u'_id': u'11377'} {u'count': 1, u'_id': u'11103'} {u'count': 2, u'_id': u'11101'}_id字段包含了不同的zipcode值,即根據(jù)鍵的值進(jìn)行了分組。
PyMongo上的索引
概覽
索引可以對(duì)查詢的高效執(zhí)行起到支持。如果沒有索引,MongoDB必須進(jìn)行全表掃描,即掃描集合中的每個(gè)文檔,來選擇符合查詢條件的文檔。如果一個(gè)適當(dāng)?shù)乃饕嬖谟谝粋€(gè)查詢中,MongoDB可以使用索引限制必須檢查文檔的數(shù)量。
使用create_index()方法來為一個(gè)集合創(chuàng)建索引。所以可以對(duì)查詢的高效執(zhí)行起到支持。MongoDB會(huì)在創(chuàng)建文檔的時(shí)候自動(dòng)為_id字段創(chuàng)建索引。
要為一個(gè)或多個(gè)字段創(chuàng)建索引,使用一個(gè)包含字段和索引類型的列表作為參數(shù):
[ ( <field1>: <type1> ), ... ]- 要?jiǎng)?chuàng)建一個(gè)升序的索引,指定pymongo.ASCENDING為索引類型()。
- 要?jiǎng)?chuàng)建一個(gè)降序的索引,指定pymongo.DESCENDING為索引類型()。
create_index()只會(huì)在索引不存在的時(shí)候創(chuàng)建一個(gè)索引。
先決條件
下面的例子將使用test數(shù)據(jù)庫中的restaurants集合。需要查看在集合中填充的實(shí)例數(shù)據(jù),請(qǐng)參閱Import Example Dataset。
在Python命令行或者IDLE中,使用MongoClient連接一個(gè)正在運(yùn)行的MongoDB實(shí)例,且已經(jīng)打開test數(shù)據(jù)庫。
from pymongo import MongoClientclient = MongoClient() db = client.test創(chuàng)建一個(gè)單字段索引
在restaurants集合中的cuisine字段上創(chuàng)建自增的索引。
import pymongo db.restaurants.create_index([("cuisine", pymongo.ASCENDING)])該方法將返回被創(chuàng)建的索引的名字。
"u'cuisine_1'"創(chuàng)建一個(gè)復(fù)合索引
MongoDB支持在多個(gè)字段上創(chuàng)建符合索引。這幾個(gè)字段的命令將聲明這個(gè)索引包含的鍵。舉個(gè)例子,下面的操作將在cuisine字段和address.zipcode字段上創(chuàng)建一個(gè)復(fù)合索引。該索引將先對(duì)cuisine的值輸入一個(gè)升序的命令,然后對(duì)address.zipcode的值輸入一個(gè)降序命令。
import pymongo db.restaurants.create_index([("cuisine", pymongo.ASCENDING),("address.zipcode", pymongo.DESCENDING) ])該方法將返回被創(chuàng)建的索引的名字。
"u'cuisine_1_address.zipcode_-1'"?
總結(jié)
以上是生活随笔為你收集整理的PyMongo官方文档翻译——VNPY的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python爬虫之pyppeteer的使
- 下一篇: python twisted教程一,异步