mongo #進入mongo命令行
show dbs #查看全部數據庫 use tutorial #切換到名爲tutorial的數據庫 show collections #查看數據庫下的全部集合,例如集合名爲QuoteItem db. QuoteItem.find() #查看集合QuoteItem下的全部數據
import pymongo client = pymongo.MongoClient(host='localhost', port=27017) # 鏈接數據庫 db=client.test #指定數據庫 collection = db.students #指定集合,至關於數據表 student1 = { 'id': '20170102', 'name': 'lilei', 'age': 24, 'gender':'female' } student2 = { 'id': '20170302', 'name': 'hong', 'age': 20, 'gender':'male' }
# 插入一條數據 #result1 = collection.insert_one(student1)
# 插入多條數據 result2 = collection.insert_many([student1, student2]) #print(result1) #print(result1.inserted_id) #得到_id print(result2) print(result2.inserted_ids) #得到_id列表
注意正則表達式
1. 插入一條和插入多條不能同時寫入,不然會ID衝突的報錯mongodb
2. 在mongoDB中,每條數據都有一個_id屬性來惟一標識。若是沒有顯示指明該屬性,mongodb會自動產生一個ObjectId類型的_id屬性數據庫
from bson.objectid import ObjectId import pymongo client = pymongo.MongoClient(host='localhost', port=27017) db=client.test collection = db.students
#find_one()查詢一條數據 result1 = collection.find_one({'name': 'hong'}) result2 = collection.find_one({'_id': ObjectId('5b4ef71ea5979a113cfa8bc0')})
# find()用來查詢多條數據,返回類型是cursor的一種生成器 result3 = collection.find({'age':20})
# 查詢年齡大於20的數據 result4 = collection.find({'age': {'$gt': 20}})
# 查詢名字以h開頭的數據 result5 = collection.find({'name': {'$regex': '^h.*'}}) print(type(result1)) print(result1) print(result2) print(result3) for result in result3: print(result) for result in result4: print(result) print("\n正則匹配") for result in result5: print(result)
符號 | 含義 | 示例 |
$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]}} |
符號 | 含義 | 示例 | 示例含義 |
$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/spa
import pymongo client = pymongo.MongoClient(host='localhost', port=27017) db=client.test collection = db.students # 一共有多少條數據的計數 count1 = collection.find().count() print(count1) # 符合某個條件的數據的計數 count2 = collection.find({'age': 20}).count() print(count2) #排序,按年齡升序; 降序的話用DESCENDING result1 = collection.find().sort('age', pymongo.ASCENDING) print([result['age'] for result in result1]) # 按年齡升序排序,從第4個數據開始輸出 result2 = collection.find().sort('name', pymongo.ASCENDING).skip(3) # 按年齡升序排序,從第4個數據開始輸出,而且限制輸出2條數據 result3 = collection.find().sort('name', pymongo.ASCENDING).skip(3).limit(2) print([result['name'] for result in result2]) print([result['name'] for result in result3])
import pymongo client = pymongo.MongoClient(host='localhost', port=27017) db=client.test collection = db.students condition = {'name':'hong'} #定義一個按條件查找的變量 #按條件找出數據並修改 student = collection.find_one(condition) student['name'] = 'hong123' #使用update_one()更新一個數據 result = collection.update_one(condition, {'$set':student}) print(result) #調用matched_count和modified_count屬性得到匹配的數據條目和影響的數據條目 print(result.matched_count, result.modified_count)
注意:命令行
$set的做用是隻更新student字典內存在的字段,若是原先還有其餘字段,則不會更新,也不會刪除。code
若是不用$set的話,則會把以前的數據所有用student字典替換,若是本來存在其餘字段,則會被刪除blog
import pymongo client = pymongo.MongoClient(host='localhost', port=27017) db=client.test collection = db.students condition = {'age':20} #condition = {'age': {'$gt': 20}} 年齡大於20的 # {'$inc': {'age': 1}}這裏表示age=20的數據所有加1,也就是改成21 result = collection.update_many(condition, {'$inc': {'age': 1}}) print(result) print(result.matched_count, result.modified_count)
from bson.objectid import ObjectId import pymongo client = pymongo.MongoClient(host='localhost', port=27017) db=client.test collection = db.students #result1 = collection.remove({'_id': ObjectId('5b4ef71ea5979a113cfa8bc0')}) #result2 = collection.delete_one({'name': 'hong'}) result3 = collection.delete_many({'age': {'$lt':25}) #print(result1) print(result3.deleted_count)
傳統的方式是用remove(),可刪除符合條件的一個或者多個數據排序
新的方式是用delete_one() 刪除一條數據,delete_many() 刪除多條數據,這種方法可用deleted_count屬性來獲取刪除的數據條目ip