使用pymongo和flask创建特定结构的文档

时间:2016-06-27 09:47:02

标签: mongodb flask pymongo

我想要一些关于烧瓶,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_snr_grnr_sgr添加到其中值。

我的代码没有按预期运行,但是在temp集合中插入文档,集合具有相同的no。将文档作为lg列表,而不修改表单列表。

谢谢。

0 个答案:

没有答案