亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中有哪些常見的MongoDB數據庫操作

發布時間:2021-05-31 16:41:00 來源:億速云 閱讀:165 作者:Leah 欄目:開發技術

這篇文章給大家介紹Python中有哪些常見的MongoDB數據庫操作,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

下載pymongo庫

pip install pymongo

前置操作

# 獲取MongoDB操作,localhost為host,27017為MongoDB默認port
client = pymongo.MongoClient("mongodb://localhost:27017/")
# 操作test數據庫
db = client.test
# 獲取Student集合
student = db.Student

插入單條數據

# 插入一條數據,并獲取返回結果
res = student.insert_one({"name":"老王"})
# 獲取插入之后該條數據的id
object_id = res.inserted_id
print(object_id)

插入多條數據

# 插入9條數據
res = student.insert_many([{"name":"name%d"%index} for index in range(1,10)])
# 獲取插入之后該9條數據的ids,object_ids為一個list
object_ids = res.inserted_ids
print(object_ids)

查詢單條數據

# 查詢單條數據,res為一個dict
res = student.find_one({"name":"老王"})

查詢滿足條件的所有數據

# 查詢滿足條件的所有數據,res為一個pymongo.cursor.Cursor對象
res = student.find({"name":"老王"})
# 獲取數據個數
print(res.count())
for index in res:
  # index為一個dict。注意:這個循環只能進行一次,如需再次操作返回結果,需要在find一次,或將list(res),將這個返回結果保存起來
  print(index)

更新

# 查詢并更新。{"name":"老王"}為查詢條件;{"$set":{"addr":"家住隔壁"}}更新數據;upsert=False找不到不插入數據,upsert=True找不到則插入數據
# res為返回結果,res為一個字典對象,是之前數據的字典
res = student.find_one_and_update({"name":"老王"},{"$set":{"addr":"家住隔壁"}},upsert=False)

刪除單條數據

student.delete_one({"name":"老王"})

刪除匹配條件的所有數據

student.delete_many({"name":"老王"})

附:更多MongoDB的操作

MongoDB 是一個基于分布式文件存儲的數據庫。由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。

MongoDB 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能。接下來記錄一下在終端怎么使用MongoDB:

常用命令

切換/創建數據庫

use xxx;  # 切換數據庫,不存在則創建

插入數據

# 插入數據,name="Python",age=100,Student為集合(表)名,Student不存在會自動創建
db.Student.insert({name:"Python",age:100})

或者定義一個字典

document = {name:"Python",age:100}
db.Student.insert(document)

查詢數據

# 查詢所有數據
db.Student.find()
# 查詢所有數據并格式化輸出
db.Student.find().pretty()
# 條件查詢,name="python"的所有數據
db.Student.find({name:"python"})
# 條件查詢,age > 50的所有數據
db.Student.find({age:{$gt:50}})
# 條件查詢,age >= 50的所有數據
db.Student.find({age:{$gte:50}})
# 條件查詢,age < 50的所有數據
db.Student.find({age:{$lt:50}})
# 條件查詢,age <= 50的所有數據
db.Student.find({age:{$lte:50}})
# 條件查詢,age == 50的所有數據
db.Student.find({age:{$eq:50}})
# 條件查詢,age != 50的所有數據
db.Student.find({age:{$ne:50}})
# 條件查詢,存在name字段的所有數據
db.Student.find({name:{$exists:true}})
# 多條件查詢,name="python"并且age=50的所有數據
db.Student.find({name:"python",age:50})
# $and語法,name="python"并且age=50的所有數據。
db.Student.find({$and:[{name:"python"},{age:50}]})
# 查詢字典數組的數據infoList = [{"province":"廣東","city":"深圳"}]
db.Student.find({"infoList.province":"廣東"})
# 查詢數量
db.Student.find({name:"python"}).count()
# 或查詢,$or語法。查詢name="python"或name="android"的所有數據
db.Student.find({$or:[{name:"python"},{name:"android"}]})
# $size語法,查詢info數組長度為8的所有數據
db.Student.find({info:{$size:8}})
# $not語法,查詢info數組長度不為8的所有數據
db.Student.find({info:{$not:{$size:8}}})
# and與or聯合使用.相當于 where age=18 and (name="python" or name="android")
db.Student.find({age:18,$or:[{name:"python"},{name:"android"}]})
# $nor語法,搜索name既不等于"python"且不等于"android"的所有數據
db.Student.find({"$nor":[{name:"python"},{name:"android"}]})
# $in語法.搜索name="老張"或name="老王"的所有數據
db.Student.find({name:{$in:["老王","老張"]}})
# $nin語法.搜索name不為"老張"或"老王"的所有數據
db.Student.find({name:{$nin:["老王","老張"]}})
# $all語法,搜索info=["aaa","bbb"]的所有數據
db.Student.find({info:{$all:["aaa","bbb"]}})
# $mod語法,搜索sex % 2 == 0的所有數據
db.Student.find({sex:{$mod:[2,0]}})
# $where語法,搜索age=info的所有數據
db.Student.find({"$where":"this.age==this.info"})
# $slice語法,過濾,info數組中的后3個數據
db.Student.find({},{info:{$slice:-3}})
# $slice語法,過濾,info數組中的前3個數據
db.Student.find({},{info:{$slice:3}})
# $slice語法,過濾,info數組中跳過20個數據之后取10個數據
db.Student.find({},{info:{$slice:[20,10]}})
# $slice語法,過濾,info數組中倒數第20個數據之后取10個數據
db.Student.find({},{info:{$slice:[-20,10]}})
# 正則.獲取name包含"王"的所有數據
db.Student.find({name:{$regex:"王"}})
# 正則。獲取name包含"a"并且不區分大小寫的所有數據
db.Student.find({name:{$regex:"a",$options:"i"}})

更新數據

# 找到name="MongoDB"的數據,將其更改為name="MongoDB學習",只修改匹配到的第一條數據
db.Student.update({name:"MongoDB"},{$set:{name:"MongoDB學習"}})
# 找不到name="MongoDB"的數據,則插入name="MongoDB學習",找到了則為修改。upsert:true找不到則插入,默認false,不插入
db.Student.update({name:"MongoDB"},{$set:{name:"MongoDB學習"}},{upsert:true})
# 找到name="MongoDB"的數據,將其更改為name="MongoDB學習"。multi:true更改所有匹配的數據,默認false,只匹配第一條
db.Student.update({name:"MongoDB"},{$set:{name:"MongoDB學習"}},{multi:true})
# 匹配name="MongoDB"的第一條數據,將其更改為name="MongoDB學習"
db.Student.updateOne({name:"MongoDB"},{$set:{name:"MongoDB學習"}})
# 更新字典數組的數據infoList = [{"province":"廣東","city":"深圳"}]
db.Student.update({"infoList.province":"廣東"},{"$set":{"province.$.city":"廣州"}})
# 將age>18的數據,修改name="xxx",第一個false:不存在不會插入(true為不存在則插入),第二個false:只匹配第一條數據(true為匹配所有數據)
db.Student.update({age:{$gt:18}},{$set:{name:"xxx"}},false,false)
# 在name="python"的所有數據里,將age字段值+1
db.Student.update({name:"python"},{$inc:{age:1}})
# 在name="python"的所有數據里,將age鍵刪除,1可以是任何值
db.Student.update({name:"python"},{$unset:{age:1}})
# 在name="python"的所有數據里,將age鍵名修改成"Age"
db.Student.update({name:"python"},{$rename:{age:"Age"}})
# 在name="python"的所有數據里,在名為array的數組添加abc元素
db.Student.update({name:"python"},{$push:{array:"abc"}})
# 在name="python"的所有數據里,將["abc","adc"]里所有元素添加到array里面
db.Student.update({name:"python"},{$pushAll:{array:["abc","adc"]}})
# 在name="python"的所有數據里,在名為array的數組刪除abc元素
db.Student.update({name:"python"},{$pull:{array:"abc"}})
# 在name="python"的所有數據里,將["abc","adc"]里所有元素全部從array里刪除
db.Student.update({name:"python"},{$pullAll:{array:["abc","adc"]}})
# 在name="python"的所有數據里,刪除array數組尾部數據,無論array為多少都只刪除一條,array小于0時,刪除頭部第一條,array大于等于0時,刪除尾部第一條
db.Student.update({name:"python"},{$pop:{array:2}})

刪除數據

# 刪除匹配到的所有數據
db.Student.remove({name:"老張"})
# 刪除匹配到第一條數據,justOne:true只刪除一條數據
db.Student.remove({name:"老張"},{justOne:true})

**type**:type**:type操作符是基于BSON類型來檢索集合中匹配的數據類型,并返回結果

常用type類型:

數字類型
1Double
2String
3Object
4Array
5Binary data
6Undefined
7Object id
8Boolean
9Date
10Null
11Regular Expression
13JavaScript
14Symbol
15JavaScript (with scope)
1632-bit integer
17Timestamp
1864-bit integer
255Min key
127Max key
# 查詢name為String類型的所有數據,2為String
db.Student.find({name:{$type:2}})
  • limit:限制條數

# 查詢name="python"的所有數據,限制2條
db.Student.find({name:"python"}).limit(2)
  • skip:跳過數據

# 查詢name > 15的數據,跳過前兩條,并限制只查詢兩條
db.Student.find({name:{$gt:15}}).limit(2).skip(2)
  • sort:排序,1位升序,-1位降序

# 查詢所有數據,并以age升序排列
db.Student.find().sort({age:1})
# 多條件排序
db.Student.find().sort({age:1,score:-1})
  • findAndModify:查找并更新

# 查找name="python"的所有數據,并修改age=18
db.Student.findAndModify({query:{name:"python"},update:{$set:{age:18}}})
  • ObjectId

# 獲取文檔的創建時間
ObjectId("598542475e6b2464187abef7").getTimestamp()
  • aggregate:聚合查詢

常用聚合表達式:

表達式描述
$sum
$avg平均值
$min最小值
$max最大值
$push在結果中插入值到數組中
$addToSet在結果中插入值到數組中,但不創建副本
$first根據資源文檔的排序,獲取第一個數據
$last根據資源文檔的排序,獲取最后一個數據
# 根據name分組,并插入sum,sum值為該組所有age的和
db.Student.aggregate([{$group:{_id:"$name",sum:{$sum:"$age"}}}])
# 根據name分組,并插入sum,sum值為該組的數量,并以sum排序,升序
db.Student.aggregate([{$group:{_id:"$name",sum:{$sum:1}}}])
# 根據name分組,并插入avg,avg值為該組所有age的平均值
db.Student.aggregate([{$group:{_id:"$name",avg:{$avg:"$age"}}}])
# 根據name分組,并插入min,min值為該組所有age的最小值
db.Student.aggregate([{$group:{_id:"$name",min:{$min:"$age"}}}])
# 根據name分組,并插入max,max值為該組所有age的最大值
db.Student.aggregate([{$group:{_id:"$name",max:{$max:"$age"}}}])
# 根據name分組,并插入數組array,array值為該組所有的age值
db.Student.aggregate([{$group:{_id:"$name",array:{$push:"$age"}}}])
# 根據name分組,并插入數組array,array值為該組所有的age值
db.Student.aggregate([{$group:{_id:"$name",array:{$addToSet:"$age"}}}])
# 根據name分組,并插入f,f值為該組age下的第一個值
db.Student.aggregate([{$group:{_id:"$name",f:{$first:"$age"}}}])
# 根據name分組,并插入l,l值為該組age下的第一個值
db.Student.aggregate([{$group:{_id:"$name",l:{$last:"$age"}}}])

管道操作實例

1. $project:用于修改文檔的輸出結構

# 查詢所有的name,age數據,默認包含_id數據。讓不包含_id,可以使_id:0
db.Student.aggregate({$project:{name:1,age:1}})

此時輸出的內容只有_id,name,age,_id是默認會輸出的,想不輸出_id,可以使_id:0

2. $match:用于過濾數據

db.Student.aggregate([{$match:{age:{$gt:19,$lte:23}}},{$group:{_id:null,count:{$sum:1}}}])

match過濾出age大于19且小于等于23的數據,然后將符合條件的記錄送到下一階段match過濾出age大于19且小于等于23的數據,然后將符合條件的記錄送到下一階段group管道操作符進行處理

3. $skip:將前5個過濾掉

db.Student.aggregate({$skip:5})

$skip將前面5個數據過濾掉

關于Python中有哪些常見的MongoDB數據庫操作就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

靖远县| 尉犁县| 祥云县| 聊城市| 京山县| 广南县| 陇川县| 县级市| 祥云县| 界首市| 阿巴嘎旗| 峨眉山市| 四平市| 准格尔旗| 西林县| 萨嘎县| 凤阳县| 乳山市| 资讯| 霞浦县| 洪江市| 澄江县| 澄迈县| 汽车| 临夏县| 岚皋县| 施甸县| 宁南县| 淅川县| 正镶白旗| 日喀则市| 剑阁县| 鸡西市| 革吉县| 庆安县| 墨竹工卡县| 玉山县| 精河县| 武城县| 溆浦县| 大城县|