1. 程式人生 > >mongodb修改器

mongodb修改器

ble update 鍵值 更新文檔 obj port base brush 方式

例子:[{u‘size‘: {u‘h‘: 28.0, u‘uom‘: u‘cm‘, u‘w‘: 35.5}, u‘item‘: u‘canvas‘, u‘_id‘: ObjectId(‘5b6be4a2b5f86831dbf27f43‘), u‘tags‘: [u‘cotton‘], u‘qty‘: 100.0}]

# 連接mongog服務
import pymongo
client = pymongo.MongoClient("mongodb://10.255.0.250:27017/")
# select database
db = client.test
# 選擇集合
table = db.inventory

## 修改器
# $inc 修改器$inc可以對文檔的某個值為數字型(只能為滿足要求的數字)的鍵進行增減的操作
table.update({"item":"canvas"},{"$inc":{"qty":2}})
table.update({"item":"canvas"},{"$inc":{"qty":-3}})

# $set 用來指定一個鍵並更新鍵值,若鍵不存在並創建
table.update({"item":"canvas"},{"$set":{"qty":5}})
# 對於內嵌文檔在使用$set更新時,使用"."連接的方式。
table.update({"item":"canvas"},{"$set":{"size.h":29}})

# 使用修改器$unset時,不論對目標鍵使用1、0、-1或者具體的字符串等都是可以刪除該目標鍵
table.update({"item":"canvas"},{"$set":{"name":"klc"}})
table.update({"item":"canvas"},{"$unset":{"name":0}})

# $push--向文檔的某個數組類型的鍵添加一個數組元素,不過濾重復的數據。添加時鍵存在,要求鍵值類型必須是數組;鍵不存在,則創建數組類型的鍵
table.update({"item":"canvas"},{"$push":{"list":0}})
table.update({"item":"canvas"},{"$unset":{"list":1}})

# $pop從數組的頭或者尾刪除數組中的元素,1==頭部,-1==尾部
table.update({"item":"canvas"},{"$pop":{"list":-1}})
table.update({"item":"canvas"},{"$pop":{"list":1}})

# $pull從數組中刪除滿足條件的元素
table.update({"item":"canvas"},{"$push":{"list":"klc"}})
table.update({"item":"canvas"},{"$pull":{"list":"klc"}})

# 在需要對數組中的值進行操作的時候,數組是0開始的,可以直接將下標作為鍵來選擇元素,若為多個文檔滿足條件,則只更新第一個文檔
table.update({"item":"canvas"},{"$push":{"list":{‘name‘:"hrr2"}}})
table.update({"item":"canvas"},{"$push":{"list":{‘name‘:"hrr3"}}})
table.update({"item":"canvas"},{"$set":{"list.0.name":"hrr0"}})
table.update({"item":"canvas"},{"$set":{"list.1.name":"hrr1"}})

# upsert是一種特殊的更新。當沒有符合條件的文檔,就以這個條件和更新文檔為基礎創建一個新的文檔,如果找到匹配的文檔就正常的更新。
使用upsert,既可以避免競態問題,也可以減少代碼量(update的第三個參數就表示這個upsert,參數為true時)
table.update({"item":"canvas1"},{"$set":{"list.1.name":"hrr1"}},True)

mongodb修改器