我想要一些关于烧瓶,pymongo和一些想法的帮助。
我想做什么:
我有一个清单:
lg=[{'name_dep': name_dep, 'cod_prg': cod_prg, 'name_prg': name_prg,
'cod_form': cod_form, 'an_s': frm['an_s'], 'serie': serie,
'nr_s':frm['nr_s'], 'nr_gr': frm['nr_gr'], 'nr_sgr': frm['nr_sgr']}]
其中frm=mongo.db.colecttion1
我想创建一个临时集合,其中的文档具有以下结构:
{
"_id" : ObjectId("576d3494b7e8f8d6d0d7d0e6"),
"name_dep" : "name_dep1",
"cod_prg" : "cod1",
"an_s" : "1",
"name_prg" : "name1",
"forms" : [
{
"nr_gr" : "5",
"nr_sgr" : "10",
"nr_s" : "150"
}
{
"nr_gr" : "6",
"nr_sgr" : "12",
"nr_s" : "90"
}
{
"nr_gr" : "2",
"nr_sgr" : "4",
"nr_s" : "50"
}
],
"cod_form" : "1",
"serie" : "XX"
}
实现这一目标的代码是:
if mongo.db.form_temp:
mongo.db.form_temp.drop()
coll_temp=mongo.db.form_temp
formatie1=lg[0]
coll_temp.insert({'name_dep':formatie1['name_dep'], 'cod_prg':formatie1['cod_prg'], 'name_prg':formatie1['name_prg'], 'cod_form':formatie1['cod_form'], 'an_s':formatie1['an_s'], 'serie':formatie1['serie'], 'forms':[{'nr_s':formatie1['nr_s'], 'nr_gr':formatie1['nr_gr'], 'nr_sgr':formatie1['nr_sgr']}]})
for y in range (1, len(lg)-1):
x=lg[y]
dep_in_coll=mongo.db.coll_temp.find_one({ '$and': [{'name_dep':x['name_dep']}, {'cod_prg':x['cod_prg']}]})
if dep_in_coll is None:
coll_temp.insert({'name_dep':x['name_dep'], 'cod_prg':x['cod_prg'], 'name_prg':x['name_prg'], 'cod_form':x['cod_form'], 'an_s':x['an_s'], 'serie':x['serie'], 'forms':[{'nr_s':x['nr_s'], 'nr_gr':x['nr_gr'], 'nr_sgr':x['nr_sgr']}]})
else:
iddoc=dep_in_coll['_id']
listforms=dep_in_coll['forms']
listforms.append([{'nr_s':x['nr_s'], 'nr_gr':x['nr_gr'], 'nr_sgr':x['nr_sgr']}])
dep_in_coll.update({'_id':iddoc}, {'$set' : {'forms': listforms}})
我要做的是删除临时集合(如果存在),然后再次创建集合并插入列表lg的第一个元素。
然后遍历lg列表,并为每个name_dep , cod_prg
对的相同值修改表单列表,方法是将字段nr_s
,nr_gr
,nr_sgr
添加到其中值。
我的代码没有按预期运行,但是在temp集合中插入文档,集合具有相同的no。将文档作为lg列表,而不修改表单列表。
谢谢。