mangodb的存儲

 

mongodb基本命令

mongo #進入mongo命令行
show dbs #查看全部數據庫 use tutorial #切換到名爲tutorial的數據庫 show collections #查看數據庫下的全部集合,例如集合名爲QuoteItem db. QuoteItem.
find() #查看集合QuoteItem下的全部數據

 

 

1. 插入數據

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屬性數據庫

 

 

 

2. 查詢

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)

 

2.1 比較符號

符號 含義 示例
$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]}}

  

 2.2 功能符號

符號 含義 示例 示例含義
$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

 

 

 

 

3. 計數,排序,偏移

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])

 

 

 

 

4. 更新

4.1 update_one()更新一條數據

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

 

4.2  update_many() 更新多條數據

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)

 

 

 

5. 刪除

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

相關文章
相關標籤/搜索