python : 3.8.8
pymongo:3.12.9
我有資料在我的集合和新的資料,我想把它推到集合中。
我的資料庫中的資料
from pymongo import MongoClient, UpdateOne
輸入pandas作為pd
{
"_id" : ObjectId("6143b5b78d248ba8ed0c3d88"/span>)。
"部門" : "A"。
"RKK_T" : 0.15,
"RKK_M" : 0.2,
"lastModified" : ISODate("2021-09-16T22:23:45.411Z")
},
{
"_id" : ObjectId("6143b5b78d248ba8ed0c3d89") 。
"部門" : "B",
"RKK_T" : 0.22,
"RKK_M" : 0.3,
"lastModified" : ISODate("2021-09-16T22:23:45.411Z")
}
這是我的新資料,我想把它推送到資料庫中
data = [{ {
"_id"/span> : "6143b5b78d248ba8ed0c3d88"/span>。
"Sector" : "A",
"RKK_T" : 0.15,
"RKK_M" : 0.25,
"lastModified" : datetime.utcnow()
},
{
"_id"/span> : "6143b5b78d248ba8ed0c3d89"。
"部門" : "B"。
"RKK_T" : 0.22,
"RKK_M" : 0.3,
"lastModified" : datetime.utcnow()
},
{
"_id"/span> : "6143b5b78d248ba8ed0c3d90"/span>。
"部門" : "C"。
"RKK_T" : 0.25,
"RKK_M" : 0.32,
'RKK_K' : 0.4,
"lastModified" : datetime.utcnow()
}
]
df = pd. DataFrame(data, columns=['_id', '部門', 'RKK_T', 'RKK_M', 'lastmodified'] )
df
_id 部門 RKK_T RKK_M lastmodified
0 6143b5b78d248ba8ed0c3d88 A 0.15 0.25 NaN
1 6143b5b78d248ba8ed0c3d89 B 0.22 0.30 NaN
2 6143b5b78d248ba8ed0c3d90 C 0.25 0.32 NaN
所以我認為我需要按每個Sector過濾,并更新RKK_T和RKK_M列的值。
基于這里的解決方案,我嘗試了
。a = [] 。
b = {}
for d in data :
b = {'updateOne':{
"filter": {'Sector':d【'Sector'】}。
"update":{'$set'/span>:{
"RKK_T":d【"RKK_T"】。
"RKK_M" : d["RKK_M"] 。
'RKK_K' :d["RKK_K"]。
"lastModified" :d["lastModified"]。
}}
}}
a.append(b)
db.collection.bulk_write(a)
但是得到了這個錯誤
AttributeError: 'dict' object has no attribute '_add_to_bulk'
uj5u.com熱心網友回復:
這里記錄了pymongo的UpdateOne()批量操作的構造。https://pymongo.readthedocs.io/en/stable/api/pymongo/operations.html#pymongo.operations.UpdateOne
一個使用的例子:
from pymongo import UpdateOne
# <setup snipped>/span>
for d in data:
b = UpdateOne({'Sector': d['Sector']}, {'$set': {
"RKK_T": d.get("RKK_T")。
"RKK_M": d.get("RKK_M")。
'RKK_K': d.get("RKK_K")。
"lastModified": d.get("lastModified")
}})
a.append(b)
db.collection.bulk_write(a)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/324668.html
標籤:
