pymongo操做MongoDB

pymongo操做MongoDB

安裝,啓動及連接

MongoDB

返回目錄python

  • 官方網站:https://www.mongodb.comgit

  • 官方文檔:https://docs.mongodb.comgithub

  • GitHub:https://github.com/mongodb正則表達式

  • 中文教程:http://www.runoob.com/mongodb/mongodb-tutorial.htmlmongodb

  • 16.04安裝:
    • 導入MongoDB的GPG key:sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
    • 建立apt-get源列表:echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
    • 更新apt-get源:sudo apt-get update
    • 安裝MongoDB:sudo apt-get install -y mongodb-org
  • 運行:
    • 安裝完成後運行MongoDB:mongod --port 27017 --dbpath /data/db爲端口號和數據文件存儲路徑.運行sudo service mongod start就行
  • 配置遠程鏈接及用戶名密碼
    • 進入MongoDB命令行:mongo --port 27017找不到文件,運行失敗:http://www.javashuo.com/article/p-emsysqab-cq.html
    • 輸入:use admin
    • 輸入:db.createUser({user: 'admin', pwd: 'admin123', roles: [{role: 'root', db: 'admin'}]})建立了一個用戶名爲admin,密碼爲admin123的用戶,賦予最高權限
    • 修改MongoDB的配置文件,使MongoDB可被遠程訪問,添加權限認證配置:sudo vi /etc/mongod.conf修改net部分添加security內容:
    net:
        port: 27017
        bindIp: 0.0.0.0
    security:
        authorization: enabled
    • 重啓:sudo service mongod restart
  • 視化工具

    mongo --port 27017
    use admin
    db.auth("myUserAdmin", "abc123" )數據庫

pymongo

返回目錄ubuntu

鏈接MongoDB,指定數據庫,指定集合

返回目錄

import pymongo  # 1.導入數據包
client = pymongo.MongoClient('mongodb://user:password@localhost:27017/')  # 2.建立鏈接對象,port默認27017,加上配置的用戶名和密碼,不然會pymongo.errors.OperationFailure: not authorized on test to execute command
#client = pymongo.MongoClient(host='localhost', port=27017)# 另外一種建立鏈接對象的方式,指定用戶和權限方式還不清楚,暫時不推薦
db = client.test  # 3.指定數據庫
#db = client['test']  # 另外一種指定數據庫方式
collection = db.students  # 4.指定集合,聲明瞭一個Collection對象
#collection = db['students']  # 指定集合另外一種方式

插入數據

返回目錄

  • 插入一條數據
student = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}  # 將一條數據以字典形式表示
 
result = collection.insert_one(student)  # insert_one傳入字典,返回InsertOneResult對象
print(result.inserted_id)  # inserted_id屬性獲取數據_id,每條數據其實都有一個_id屬性來惟一標識。若是沒有顯式指明該屬性,MongoDB會自動產生一個ObjectId類型的_id屬性
  • 插入多條數據
student1 = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}
 
student2 = {
    'id': '20170202',
    'name': 'Mike',
    'age': 21,
    'gender': 'male'
}
 
result = collection.insert_many([student1, student2])  # insert_many傳入列表,列表元素是字典,返回的類型是InsertManyResult
print(result.inserted_ids)  # inserted_ids屬性獲取數據_id列表

查詢

普通查詢

返回目錄

  • find_one()查詢獲得的是單個結果
result = collection.find_one({'name': 'Mike'})
  • 根據ObjectId來查詢,須要使用bson庫裏面的objectid
from bson.objectid import ObjectId
 
result = collection.find_one({'_id': ObjectId('593278c115c2602667ec6bae')})
  • find()多條數據的查詢,返回Cursor類型,一個生成器對象
results = collection.find({'age': 20})
for result in results:
    print(result)

條件查詢

返回目錄

  • 比較查詢

例如:

results = collection.find({'age': {'$gt': 20}})  # 查詢年齡大於20的數據

比較符號:

符號 含義 示例
$lt 小於 {'age':{'$lt':20}}
$gt 大於 {'age':{'$gt':20}}
$lte 小於等於 {'age':{'$lte':20}}
$gte 大於等於 {'age':{'$gte':20}}
$ne 不等於 {'age':{'$ne':20}}
$in 在範圍內 {'age':{'$in':[20, 23]}}
$nin 不在範圍內 {'age':{'$nin':[20, 23]}}
  • 其餘條件:

例如:

results = collection.find({'name': {'$regex': '^M.*'}})  # 正則匹配查詢

功能符號:

符號 含義 示例 示例含義
$regex 匹配正則表達式 {'name': {'$regex': '^M.*'}} name以M開頭
$exists 屬性是否存在 {'name': {'$exists': True}} name屬性存在
$type 類型判斷 {'age': {'$type': 'int'}} age的類型爲int
$mod 數字模操做 {'age': {'$mod': [5, 0]}} 年齡模5餘0
$text 文本查詢 {'$text': {'$search': 'Mike'}} text類型的屬性中包含Mike字符串
$where 高級條件查詢 {'$where': 'obj.fans_count == obj.follows_count'} 自身粉絲數等於關注數

詳細用法官方文檔:https://docs.mongodb.com/manual/reference/operator/query/

計數

返回目錄

統計查詢結果有多少條數據能夠對查詢結果調用count()方法
例如:count = collection.find({'age': 20}).count()

排序

返回目錄

排序時,直接調用sort()方法,並在其中傳入排序的字段及升降序標誌.
例如:results = collection.find().sort('name', pymongo.ASCENDING)
pymongo.ASCENDING指定升序,pymongo.DESCENDING指定降序排列

偏移

返回目錄

skip()方法偏移幾個位置,好比偏移2,就忽略前兩個元素,獲得第三個及之後的元素
limit()方法指定要取的結果個數
能夠配合使用選取結果範圍
例如:results = collection.find().sort('name', pymongo.ASCENDING).skip(2).limit(2)

更新

返回目錄

  • update()方法,指定更新的條件和更新後的數據便可(官方不推薦)
    例如:
condition = {'name': 'Kevin'}
student = collection.find_one(condition)
student['age'] = 25
result = collection.update(condition, student)
print(result)
  • $set操做符對數據進行更新:
    result = collection.update(condition, {'$set': student})
    只更新student字典內存在的字段,若是不用$set的話,則會把以前的數據所有用student字典替換

  • update_one()方法,只會找到一條更新
    第二個參數不能再直接傳入修改後的字典,而是須要使用{'$set': student}這樣的形式,其返回結果是UpdateResult類型。調用matched_count和modified_count屬性,能夠得到匹配的數據條數和影響的數據條數。
    例如:

condition = {'name': 'Kevin'}
student = collection.find_one(condition)
student['age'] = 26
result = collection.update_one(condition, {'$set': student})
print(result.matched_count, result.modified_count)
  • update_many()方法,則會將全部符合條件的數據都更新

刪除

返回目錄](#top)

remove()方法指定刪除的條件便可,此時符合條件的全部數據均會被刪除(官方不推薦)

delete_one()即刪除第一條符合條件的數據,delete_many()即刪除全部符合條件的數據

例如:

result = collection.delete_one({'name': 'Kevin'})
print(result)
print(result.deleted_count)
result = collection.delete_many({'age': {'$lt': 25}})
print(result.deleted_count)  # deleted_count屬性獲取刪除的數據條數

其餘操做

相關文章
相關標籤/搜索