bulk_write 在 mongo 数据库中不工作,如何将新文档写入集合?
bulk_write not working in mongo db, how to write new documents to collection?
python : 3.8.8
pymongo:3.12.9
我的集合中有数据,我想将其推送到集合中的新数据。
我数据库中的数据
from pymongo import MongoClient, UpdateOne
import pandas as pd
{
"_id" : ObjectId("6143b5b78d248ba8ed0c3d88"),
"Sector" : "A",
"RKK_T" : 0.15,
"RKK_M" : 0.2,
"lastModified" : ISODate("2021-09-16T22:23:45.411Z")
},
{
"_id" : ObjectId("6143b5b78d248ba8ed0c3d89"),
"Sector" : "B",
"RKK_T" : 0.22,
"RKK_M" : 0.3,
"lastModified" : ISODate("2021-09-16T22:23:45.411Z")
}
这是我要将其推送到数据库的新数据
data = [{
"_id" : "6143b5b78d248ba8ed0c3d88",
"Sector" : "A",
"RKK_T" : 0.15,
"RKK_M" : 0.25,
"lastModified" :datetime.utcnow()
},
{
"_id" : "6143b5b78d248ba8ed0c3d89",
"Sector" : "B",
"RKK_T" : 0.22,
"RKK_M" : 0.3,
"lastModified" : datetime.utcnow()
},
{
"_id" : "6143b5b78d248ba8ed0c3d90",
"Sector" : "C",
"RKK_T" : 0.25,
"RKK_M" : 0.32,
'RKK_K' : 0.4,
"lastModified" : datetime.utcnow()
}
]
df = pd.DataFrame(data, columns=['_id', 'Sector', 'RKK_T', 'RKK_M', 'lastmodified'])
df
_id Sector 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
列的值。
基于解决方案here我试过了
a = []
b = {}
for d in data :
b = {'updateOne':{
"filter": {'Sector':d['Sector']},
"update":{'$set':{
"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'
pymongo 的 UpdateOne() 批量运算符的构造记录在此处:https://pymongo.readthedocs.io/en/stable/api/pymongo/operations.html#pymongo.operations.UpdateOne
使用示例:
from pymongo import UpdateOne
# <setup snipped>
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)
python : 3.8.8
pymongo:3.12.9
我的集合中有数据,我想将其推送到集合中的新数据。
我数据库中的数据
from pymongo import MongoClient, UpdateOne
import pandas as pd
{
"_id" : ObjectId("6143b5b78d248ba8ed0c3d88"),
"Sector" : "A",
"RKK_T" : 0.15,
"RKK_M" : 0.2,
"lastModified" : ISODate("2021-09-16T22:23:45.411Z")
},
{
"_id" : ObjectId("6143b5b78d248ba8ed0c3d89"),
"Sector" : "B",
"RKK_T" : 0.22,
"RKK_M" : 0.3,
"lastModified" : ISODate("2021-09-16T22:23:45.411Z")
}
这是我要将其推送到数据库的新数据
data = [{
"_id" : "6143b5b78d248ba8ed0c3d88",
"Sector" : "A",
"RKK_T" : 0.15,
"RKK_M" : 0.25,
"lastModified" :datetime.utcnow()
},
{
"_id" : "6143b5b78d248ba8ed0c3d89",
"Sector" : "B",
"RKK_T" : 0.22,
"RKK_M" : 0.3,
"lastModified" : datetime.utcnow()
},
{
"_id" : "6143b5b78d248ba8ed0c3d90",
"Sector" : "C",
"RKK_T" : 0.25,
"RKK_M" : 0.32,
'RKK_K' : 0.4,
"lastModified" : datetime.utcnow()
}
]
df = pd.DataFrame(data, columns=['_id', 'Sector', 'RKK_T', 'RKK_M', 'lastmodified'])
df
_id Sector 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
列的值。
基于解决方案here我试过了
a = []
b = {}
for d in data :
b = {'updateOne':{
"filter": {'Sector':d['Sector']},
"update":{'$set':{
"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'
pymongo 的 UpdateOne() 批量运算符的构造记录在此处:https://pymongo.readthedocs.io/en/stable/api/pymongo/operations.html#pymongo.operations.UpdateOne
使用示例:
from pymongo import UpdateOne
# <setup snipped>
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)