本篇文章為大家展示了Python中如何操作Mongodb數(shù)據(jù)庫(kù),內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司專注于永仁企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站制作。永仁網(wǎng)站建設(shè)公司,為永仁等地區(qū)提供建站服務(wù)。全流程按需制作網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)1. 安裝Mongodb和pymongoMongodb的安裝和配置
Mongodb的安裝教程請(qǐng)網(wǎng)上搜索, 安裝完成后, 進(jìn)行以下配置過程:
1.1 創(chuàng)建目錄, 該目錄為Mongodb數(shù)據(jù)文件的存放目錄:*注: 本人使用的不是root用戶, 所以修改目錄的擁有者. *
sudo mkdir /data sudo chown -R python:python /data mkdir /data/db1.2 分別執(zhí)行命令:
第一條命令為指定端口和保存路徑, 第二條為運(yùn)行mongodb數(shù)據(jù)庫(kù).
mongod --port 27017 --dbpath /data/db mongo --port 270171.3 安裝pymongo
sudo pip3 install pymongo
mongodb存儲(chǔ)數(shù)據(jù)以鍵值形式, 因此在Python中使用字段插入數(shù)據(jù).
import pymongo #連接mongodb client = pymongo.MongoClient('mongodb://localhost:27017/') #指定數(shù)據(jù)庫(kù) db = client.test4 #指定集合 collection = db.students #數(shù)據(jù) student1 = { 'id': '201801', 'name': 'Jack', 'age': 20, 'gender': 'male' } student2 = { 'id': '201802', 'name': 'Tom', 'age': 22, 'gender': 'male' } student3 = { 'id': '201803', 'name': 'Rose', 'age': 21, 'gender': 'female' } student4 = { 'id': '201804', 'name': 'Mike', 'age': 20, 'gender': 'female' } student5 = { 'id': '201805', 'name': 'Ray', 'age': 20, 'gender': 'female' } student6 = { 'id': '201806', 'name': 'Alan', 'age': 21, 'gender': 'male' } #插入一條數(shù)據(jù) result1 = collection.insert_one(student1) print(result1) print(result1.inserted_id) # #插入多條數(shù)據(jù) result2 = collection.insert_many([student2, student3, student4, student5, student6]) print(result2) print(result2.inserted_ids)
運(yùn)行結(jié)果:
insert方法:
5b3a1942971951218d41c02b
[ObjectId('5b3a1942971951218d41c02c'), ObjectId('5b3a1942971951218d41c02d')]
官方推薦:
3. 查詢、計(jì)數(shù)、排序、偏移:5b3a1942971951218d41c02e [ObjectId('5b3a1942971951218d41c02f'), ObjectId('5b3a1942971951218d41c030')]
import pymongo from bson.objectid import ObjectId client = pymongo.MongoClient('mongodb://localhost:27017/') db = client.test4 collection = db.students #查詢一條數(shù)據(jù) print('單條數(shù)據(jù)','='*50) result = collection.find_one({'name': 'Jack'}) print(result) print('多條數(shù)據(jù)','='*50) #查詢多條數(shù)據(jù) for res in collection.find({'age': {'$mod': [5, 0]}}): print(res) #計(jì)數(shù) print('計(jì)數(shù)','='*50) count = collection.find({'age': {'$mod': [5, 0]}}).count() print(count) #排序 print('排序','='*50) results = collection.find().sort('name', pymongo.ASCENDING) #升序, pymongo.DESCENDING為降序 print([result['name'] for result in results]) #偏移 print('偏移','='*50) results = collection.find().sort('name', pymongo.ASCENDING).skip(2) #偏移2位,忽略前兩個(gè)數(shù)據(jù) print([result['name'] for result in results]) results = collection.find().sort('name', pymongo.ASCENDING).skip(2).limit(2) #只輸出2個(gè)數(shù)據(jù) print([result['name'] for result in results]) find({‘a(chǎn)ge': {'$mod': [5, 0]}}): 表示查找年齡取余5余0的值. 還有很多比較符號(hào), 請(qǐng)百度.
運(yùn)行結(jié)果:
單條數(shù)據(jù) ================================================== {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 20, 'gender': 'male'} 多條數(shù)據(jù) ================================================== {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 20, 'gender': 'male'} {'_id': ObjectId('5b3a1942971951218d41c02e'), 'id': '201804', 'name': 'Mike', 'age': 20, 'gender': 'female'} {'_id': ObjectId('5b3a1942971951218d41c02f'), 'id': '201805', 'name': 'Ray', 'age': 20, 'gender': 'female'} 計(jì)數(shù) ================================================== 3 排序 ================================================== ['Alan', 'Jack', 'Mike', 'Ray', 'Rose', 'Tom'] 偏移 ================================================== ['Mike', 'Ray', 'Rose', 'Tom'] ['Mike', 'Ray']4. 更新:4.1 不使用$set更新數(shù)據(jù):
import pymongo from bson.objectid import ObjectId client = pymongo.MongoClient('mongodb://localhost:27017/') db = client.test4 collection = db.students #修改 condition = {'name': 'Jack'} student = collection.find_one(condition) #獲得滿足condition的數(shù)據(jù) print('更新前: ', student) student['age'] = 22 #修改年齡 result = collection.update(condition, student) #將修改后的student替換condition print('更新后', collection.find_one(condition)) #更新的返回值 print(result) #ok=1代表執(zhí)行成功, nModified代表影響的條數(shù)
運(yùn)行結(jié)果:
更新前: {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 20, 'gender': 'male'} 更新后 {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 22, 'gender': 'male'} {'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}4.2 使用$set更新數(shù)據(jù):
import pymongo from bson.objectid import ObjectId client = pymongo.MongoClient('mongodb://localhost:27017/') db = client.test4 collection = db.students #使用$set更新 condition = {'name': 'Jack'} student = collection.find_one(condition) #獲得滿足condition的數(shù)據(jù) print('更新前: ', student) student['age'] = 23 #修改年齡 result = collection.update(condition, {'$set': student}) #將修改后的student替換condition, $set為重點(diǎn) print('更新后', collection.find_one(condition)) #更新的返回值 print(result) #ok=1代表執(zhí)行成功, nModified代表影響的條數(shù)
運(yùn)行結(jié)果:
更新前: {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 22, 'gender': 'male'} 更新后 {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 23, 'gender': 'male'} {'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}
比較使用和不適用$set更新數(shù)據(jù), 發(fā)現(xiàn)此時(shí)并沒有什么區(qū)別.
下面介紹區(qū)別所在:
4.3 區(qū)別import pymongo from bson.objectid import ObjectId client = pymongo.MongoClient('mongodb://localhost:27017/') db = client.test4 collection = db.students #使用和不使用$set更新的區(qū)別 print('使用: ') condition = {'name': 'Jack'} student = collection.find_one(condition) #獲得滿足condition的數(shù)據(jù) print('更新前: ', student) student = { 'id': '201803', 'name': 'Jack', 'age': 20, 'gender': 'female', 'mother': "Jack's mother" } result = collection.update(condition, {'$set': student}) #將修改后的student替換condition print('更新后', collection.find_one(condition)) #更新的返回值 print(result) #ok=1代表執(zhí)行成功, nModified代表影響的條數(shù) #分割線 print() print('='*20, '分割線', '='*20) print() print('不使用: ') condition = {'name': 'Jack'} student = collection.find_one(condition) #獲得滿足condition的數(shù)據(jù) print('更新前: ', student) student = { 'id': '201803', 'name': 'Jack', 'age': 20, 'gender': 'female', 'father': "Jack's father" } result = collection.update(condition, student) #將修改后的student替換condition print('更新后', collection.find_one(condition)) #更新的返回值 print(result) #ok=1代表執(zhí)行成功, nModified代表影響的條數(shù)
運(yùn)行結(jié)果:
使用:
更新前: {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201801', 'name': 'Jack', 'age': 23, 'gender': 'male'} 更新后 {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201803', 'name': 'Jack', 'age': 20, 'gender': 'female', 'mother': "Jack's mother"} {'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}
==================== 分割線 ====================
不使用: 更新前: {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201803', 'name': 'Jack', 'age': 20, 'gender': 'female', 'mother': "Jack's mother"} 更新后 {'_id': ObjectId('5b3a1942971951218d41c02b'), 'id': '201803', 'name': 'Jack', 'age': 20, 'gender': 'female', 'father': "Jack's father"} {'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}
分析上面運(yùn)行結(jié)果, 可以發(fā)現(xiàn)使用$set時(shí), 若更新數(shù)據(jù)有原數(shù)據(jù)沒有的字段, 則將該字段加到原數(shù)據(jù)上(上例為新增了mother字段), 而不會(huì)刪除任何字段. 相反, 若不使用set時(shí), 將從原數(shù)據(jù)中刪除更新數(shù)據(jù)沒有的字段, 再加上新增字段(上例為刪除了mother字段, 新增了father字段. 也可以理解為將原數(shù)據(jù)完全替換為更新數(shù)據(jù))
4.4 update_one和update_many的區(qū)別:import pymongo from bson.objectid import ObjectId client = pymongo.MongoClient('mongodb://localhost:27017/') db = client.test4 collection = db.students #官方推薦使用 #update_one和update_many的區(qū)別 print('update_one: ') condition = {'age': {'$gt': 20}} result = collection.update_one(condition, {'$inc': {'age': 1}}) print(result) print(result.matched_count, result.modified_count) #分割線 print() print('='*20, '分割線', '='*20) print() print('update_many: ') condition = {'age': {'$gt': 20}} result = collection.update_many(condition, {'$inc': {'age': 1}}) print(result) print(result.matched_count, result.modified_count)
運(yùn)行結(jié)果:
update_one:5. 刪除:1 1 ==================== 分割線 ==================== update_many: 3 3 12345678910 {‘a(chǎn)ge': {'$gt': 20}}為查找年齡大于20的, {‘inc': {‘a(chǎn)ge': 1}}為將年齡+1
import pymongo from bson.objectid import ObjectId client = pymongo.MongoClient('mongodb://localhost:27017/') db = client.test4 collection = db.students #刪除 result = collection.remove({'name': 'Jack'}) print(result) #推薦使用 result = collection.delete_one({'age': {'$gt': 20}}) print(result.deleted_count) result = collection.delete_many({'age': {'$gt': 20}}) print(result.deleted_count)
運(yùn)行結(jié)果:
{'ok': 1, 'n': 1}
1
2
上述內(nèi)容就是Python中如何操作Mongodb數(shù)據(jù)庫(kù),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。