pymongo 是 mongodb 的 python Driver Editor.
記錄下學習過程當中感受之後會經常使用多一些部分,以作參考。python
要使用pymongo最早應該作的事就是先連上運行中的 mongod 。git
from pymongo import MongoClient
client = MongoClient() 或者: client = MongoClient("mongodb://mongodb0.example.net:27019")
# 假設要鏈接的數據庫名爲 primer db = client.primer 或者: db = client['primer']
coll = db.dataset coll = db['dataset']
至此,已經完整對鏈接了數據庫和數據集,完成了初識化的操做。github
insert_one(document)
insert_many(documents, ordered=True)mongodb
insert_one(document)
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" } )
其中返回的結果:result 中是一個:InsertOneResult 類:
class pymongo.results.InsertOneResult(inserted_id, acknowledged)
其中 inserted_id
是插入的元素多 _id
值。shell
insert_many(documents, ordered=True)
result = db.test.insert_many([{'x': i} for i in range(2)])
find(filter=None, projection=None, skip=0, limit=0,
no_cursor_timeout=False, cursor_type=CursorType.NON_TAILABLE,
sort=None, allow_partial_results=False, oplog_replay=False,
modifiers=None, manipulate=True)
find_one(filter_or_id=None, *args, **kwargs)數據庫
find
cursor = db.restaurants.find() for document in cursor: print(document) # 查詢字段是最上層的 cursor = db.restaurants.find({"borough": "Manhattan"}) # 查詢字段在內層嵌套中 cursor = db.restaurants.find({"address.zipcode": "10075"})
cursor = db.restaurants.find({"grades.score": {"$gt": 30}}) cursor = db.restaurants.find({"grades.score": {"$lt": 10}}) # AND cursor = db.restaurants.find({"cuisine": "Italian", "address.zipcode": "10075"}) cursor = db.restaurants.find( {"$or": [{"cuisine": "Italian"}, {"address.zipcode": "10075"}]})
find_one
返回的是一個JSON式文檔,因此能夠直接使用!微信
sort
pymongo.ASCENDING = 1 pymongo.DESCENDING = -1 cursor = db.restaurants.find().sort("borough") cursor = db.restaurants.find().sort([ ("borough", pymongo.ASCENDING), ("address.zipcode", pymongo.DESCENDING) ])
更新文檔的函數有三個(不能更新 _id
字段)函數
update_one(filter, update, upsert=False)
update_many(filter, update, upsert=False)
replace_one(filter, replacement, upsert=False)
find_one_and_update(filter, update, projection=None, sort=None, return_document=ReturnDocument.BEFORE, **kwargs)學習
update_one
UpdateResult
,若是查找到多個匹配,則只更新result = db.restaurants.update_one( {"name": "Juni"}, { "$set": { "cuisine": "American (New)" }, "$currentDate": {"lastModified": True} } ) result.matched_count 10 result.modified_count 1
update_many
result = db.restaurants.update_many( {"address.zipcode": "10016", "cuisine": "Other"}, { "$set": {"cuisine": "Category To Be Determined"}, "$currentDate": {"lastModified": True} } ) result.matched_count 20 result.modified_count 20
replace_one
result = db.restaurants.replace_one( {"restaurant_id": "41704620"}, { "name": "Vella 2", "address": { "coord": [-73.9557413, 40.7720266], "building": "1480", "street": "2 Avenue", "zipcode": "10075" } } ) result.matched_count 1 result.modified_count 1
find_one_and_update
db.test.find_one_and_update( {'_id': 665}, {'$inc': {'count': 1}, '$set': {'done': True}}) {u'_id': 665, u'done': False, u'count': 25}}
刪除時主要有兩個:ui
delete_one(filter)
delete_many(filter)
drop()
find_one_and_delete(filter, projection=None, sort=None, kwargs)
find_one_and_replace(filter, replacement, projection=None, sort=None, return_document=ReturnDocument.BEFORE, kwargs)
delete_one
result = db.test.delete_one({'x': 1}) result.deleted_count 1
delete_many
result = db.restaurants.delete_many({"borough": "Manhattan"}) result.deleted_count 10259 # 刪除所有 result = db.restaurants.delete_many({})
drop()
drop_collection()
的別名db.restaurants.drop()
find_one_and_delete
db.test.count({'x': 1}) 2 db.test.find_one_and_delete({'x': 1}) {u'x': 1, u'_id': ObjectId('54f4e12bfba5220aa4d6dee8')} db.test.count({'x': 1})
find_one_and_replace
>>> for doc in db.test.find({}): ... print(doc) ... {u'x': 1, u'_id': 0} {u'x': 1, u'_id': 1} {u'x': 1, u'_id': 2} >>> db.test.find_one_and_replace({'x': 1}, {'y': 1}) {u'x': 1, u'_id': 0} >>> for doc in db.test.find({}): ... print(doc) ... {u'y': 1, u'_id': 0} {u'x': 1, u'_id': 1} {u'x': 1, u'_id': 2}
索引主要有建立索引和刪除索引:
create_index(keys, **kwargs)
create_indexes(indexes)
drop_index(index_or_name)
drop_indexes()
reindex()
list_indexes()
index_information()
create_index
my_collection.create_index("mike") my_collection.create_index([("mike", pymongo.DESCENDING), ... ("eliot", pymongo.ASCENDING)]) my_collection.create_index([("mike", pymongo.DESCENDING)], ... background=True)
create_indexes
>>> from pymongo import IndexModel, ASCENDING, DESCENDING >>> index1 = IndexModel([("hello", DESCENDING), ... ("world", ASCENDING)], name="hello_world") >>> index2 = IndexModel([("goodbye", DESCENDING)]) >>> db.test.create_indexes([index1, index2]) ["hello_world"]
drop_index
index_or_name
: 索引編號或者索引的namemy_collection.drop_index("mike")
drop_indexs
刪除全部索引
reindex
for index in db.test.list_indexes(): ... print(index) ... SON([(u'v', 1), (u'key', SON([(u'_id', 1)])), (u'name', u'_id_'), (u'ns', u'test.test')])