python操作mongodb之pymongo
阿新 • • 發佈:2018-12-24
tips of pymongo
主題詞:python ,mongodb , pymongo
簡介: MongoDB 是一個基於分散式檔案儲存的資料庫。由C++語言編寫。旨在為WEB應用提供可擴充套件的高效能資料儲存解決方案。它支援的資料結構非常鬆散,是類似json的bson格式,因此可以儲存比較複雜的資料型別。特點:高效能、易部署、易使用,儲存資料非常方便。優點有,儲存的檔案不需要任何結構定義,不同結構的檔案可以存在同一資料庫裡。支援完全索引,包含內部物件。
pymongo是python操作mongodb的一個庫。
1,Linux上安裝pymongo:
pip install pymongo
2,引入pymongo,建立連線
import pymongo
client = pymongo.MongoClient('mongodb://localhost:27017')
現在常用的為:
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017')
3,獲取資料庫
屬性獲取 db = client.test_database
字典獲取 db = client['test_database'] 二選一
4,獲取collection
屬性獲取 collection = db.test_collection
字典獲取 collection = db['test_collection'] 二選一
注: 對於資料庫和集合,在mongodb裡都是延遲建立,只有等到第一個資料插入的時候才會建立資料庫物件和集合
5,儲存資料
儲存資料的型別是字典型別,準確的說是BSON型別
在pymongo中使用字典來表示文件
insert(),insert_one()函式用來儲存資料
import datetime
post = {'author':'leah','text':'first','tags':['mongodb','python','pymongo'],
'date':datetime.datetime.utcnow()}
document1 = {'x':1}
posts = db.posts
post_1 = posts.insert(post)
post_2 = posts.insert_one(document1).inserted_id
#post_2 = posts.insert(document1)輸出結果不變
print type(post_1)
print type(post_2)
輸出結果為:
<class 'bson.objectid.ObjectId'>
<class 'bson.objectid.ObjectId'>
.inserted_id將返回ObjectId物件,若不加
輸出結果為: <class 'bson.objectid.ObjectId'> <class 'pymongo.results.InsertOneResult'> insert_many()用來插入多個文件(字典): new_document = [{'x':3}, {'x':4}] post_3 = posts.insert_many(new_document) 6,查詢資料 find_one()函式能夠從資料庫調出已經儲存的第一個資料 print posts.find_one() 輸出結果為: {u'x': 1, u'_id': ObjectId('591124f9f5bf486e2f360727')} 可以通過遍歷的方式獲取全部資料: for data in posts.find(): print data 注:要指定嵌入文件中的欄位的查詢條件,需要使用點操作符。 posts.find({"grades.score": {"$gt": 30}})分數大於30的查詢 大於($gt)操作符,小於($lt)操作符, $or或,$lte 小於等於, $gte大於等於 ,$ne不等於 posts.find( {"$or": [{"cuisine": "Italian"}, {"address.zipcode": "10075"}]}) 若要對查詢結果排序,追加sort()方法 7,更新資料 update_one()更新一個數據 update_many()更新多個數據 posts.update_one({'x':1},{'$set':{'x':100}}) $set 修改器用來指定一個鍵的值.如果這個鍵存在,就修改它;不存在,就建立它. posts.update_one({'x':100},{'$inc':{'x':-6}}) x會變成94 $inc 修改器後跟的資料若沒有就新增,若有,數值為正就加,為負就減。$inc只能用於整數、長整數和雙精度浮點數。 (更細節更多的修改器內容待新增) 8,刪除資料 delete_one()刪除一個數據 delete_many()刪除多個數據 drop()方法銷燬一個集合 9,計數 posts.count()
輸出結果為: <class 'bson.objectid.ObjectId'> <class 'pymongo.results.InsertOneResult'> insert_many()用來插入多個文件(字典): new_document = [{'x':3}, {'x':4}] post_3 = posts.insert_many(new_document) 6,查詢資料 find_one()函式能夠從資料庫調出已經儲存的第一個資料 print posts.find_one() 輸出結果為: {u'x': 1, u'_id': ObjectId('591124f9f5bf486e2f360727')} 可以通過遍歷的方式獲取全部資料: for data in posts.find(): print data 注:要指定嵌入文件中的欄位的查詢條件,需要使用點操作符。 posts.find({"grades.score": {"$gt": 30}})分數大於30的查詢 大於($gt)操作符,小於($lt)操作符, $or或,$lte 小於等於, $gte大於等於 ,$ne不等於 posts.find( {"$or": [{"cuisine": "Italian"}, {"address.zipcode": "10075"}]}) 若要對查詢結果排序,追加sort()方法 7,更新資料 update_one()更新一個數據 update_many()更新多個數據 posts.update_one({'x':1},{'$set':{'x':100}}) $set 修改器用來指定一個鍵的值.如果這個鍵存在,就修改它;不存在,就建立它. posts.update_one({'x':100},{'$inc':{'x':-6}}) x會變成94 $inc 修改器後跟的資料若沒有就新增,若有,數值為正就加,為負就減。$inc只能用於整數、長整數和雙精度浮點數。 (更細節更多的修改器內容待新增) 8,刪除資料 delete_one()刪除一個數據 delete_many()刪除多個數據 drop()方法銷燬一個集合 9,計數 posts.count()