目錄html
返回目錄python
官方網站:https://www.mongodb.comgit
官方文檔:https://docs.mongodb.comgithub
GitHub:https://github.com/mongodb正則表達式
中文教程:http://www.runoob.com/mongodb/mongodb-tutorial.htmlmongodb
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
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
sudo apt-get update
sudo apt-get install -y mongodb-org
mongod --port 27017 --dbpath /data/db
爲端口號和數據文件存儲路徑.運行sudo service mongod start
就行mongo --port 27017
找不到文件,運行失敗:http://www.javashuo.com/article/p-emsysqab-cq.htmluse admin
db.createUser({user: 'admin', pwd: 'admin123', roles: [{role: 'root', db: 'admin'}]})
建立了一個用戶名爲admin,密碼爲admin123的用戶,賦予最高權限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" )數據庫
返回目錄ubuntu
安裝:pip install pymongo
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列表
result = collection.find_one({'name': 'Mike'})
from bson.objectid import ObjectId result = collection.find_one({'_id': ObjectId('593278c115c2602667ec6bae')})
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)
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)
返回目錄](#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屬性獲取刪除的數據條數
組合方法
find_one_and_delete()、find_one_and_replace()和find_one_and_update(),它們是查找後刪除、替換和更新操做
對索引進行操做
create_index()、create_indexes()和drop_index()等
詳細用法文檔:http://api.mongodb.com/python/current/api/pymongo/collection.html