我正在尝试重写旧版转换脚本,并在许多场景中停留在聚合点。
例如:
我在SQL Server中有一个表如下:
userid dept groupname groupid
101 101所有用户1001
202 202新组2034
101 103管理员1020
101 105所有用户1001
在现有代码下方,每个用户只创建一个文档,并嵌入组和部门数据。
sqlCursor=pypyodbc.connect(sqlConnectionString).cursor()
mongodb=pymongo.MongoClient()
dbo=mongodb.database.collection
userDict=collections.OrderedDict()
sqlCursor.execute(''' select * from table ''')
tuples=sqlCursor.fetchall()
for tup in tuples:
idi=tup.userid
groups=userDict.get(idi,collections.OrderedDict()).get('groups', list())
groups.append({'groupid':tup.groupid,'groupname':tup.groupname})
dept=userDict.get(idi,collections.OrderedDict()).get('dept', list())
dept.append(tup.dept)
doc=collections.OrderedDict()
doc['userid']=idi
doc['groups']=groups
doc['dept']=dept
userDict['idi']=doc
dbo.insert_many(userDict.values())
对于重写,我们计划使用pandas库升级代码。我通过填充数据框如下所示取得了一些进展。
df=pandas.read_sql(''' SELECT * FROM TABLE ''',pypyodbc.connect(sqlConnectionString))
以下命令将整个数据帧转储到mongodb而不嵌入。
dbo.insert_many(df.fillna('NULL_DATA').to_dict('records'))
我尝试在熊猫中检查一些groupby
的例子但是没有按我要求的方式工作。
如何使用pandas对记录进行分组并在mongodb中生成嵌入文档?
如果使用pandas库无法实现这一点,请告诉我。
答案 0 :(得分:0)
不确定pymongo如何需要数据,但我认为你需要这样的东西:
(
df.groupby("userid")
.apply(lambda g: g.to_dict(orient="records").reset_index(name="groups"))
.to_dict(orient="records")
)
我不了解您需要如何对depts
进行分组,但您可以执行类似操作然后将其合并。