有效更新字段而不会丢失数据

时间:2015-08-25 04:58:25

标签: mongodb pymongo

我正在用pymongo弄湿我的脚,这似乎是一件容易的事,但我不确定最好的方法。

我有一个Member个对象的字典,每个对象都有一个字典(键值对数据)。我想浏览我的Member对象字典,并更新数据库:

  1. Member对象中的每个字段写入数据库,并
  2. 保留数据库中存在的该成员标识中不存在于Member对象中的任何其他字段。
  3. 这是我最好的镜头,但运行它非常慢,所以我猜这是一个更好的方法。 (也许甚至是单行?)

    在此代码中,self.members是我正在迭代的成员字典,member.structure()返回该Member个对象数据的字典。

    for m in sorted(self.members.values(), key=lambda val:val.session) : ## for each member
        if mcollection.find_one({'id':m.id}) is None: ## if there is no db entry matching the member id
            print("\tMember {0} wasn't present in the db. Inserting.".format(m.id))
            mcollection.insert(m.structure())         ## insert the full dictionary
        else: ## if there is a matching db entry
            for (k,v) in m.structure().items():  ## for each entry in the member's dictionary
                mcollection.update( {'id':m.id}, {'$set': {k:v}}, upsert=True  ) ## set the member's field to its value given in the dictionary
    

0 个答案:

没有答案