$ addToSet,以及更新其他字段?

时间:2015-03-31 02:35:42

标签: python mongodb pymongo

我无法在MongoDB中更新文档,包括使用Pymongo添加到列表和更新某些字段。

总结一下,我想:

  1. 为列表添加值。
  2. 更新一些字段。
  3. 使用单个更新声明。
  4. 我尝试了两种方法,但两种方法都不起作用:

    key = {'username':'user1'}
    
    user_detail = {
    'name':{'first':'Marie', 'last':'Bender'},
    'items':{'$addtoset':{'cars':'BMW'}}
    }
    
    user_detail2 = {
    'name':{'first':'Marie', 'last':'Bender'},
    '$addtoset':{'items.cars':'BMW'}    
    }
    
    mongo_collection.update(key, user_detail, upsert=True)
    mongo_collection.update(key, user_detail2, upsert=True)
    

    错误消息:美元($)前缀字段' $ addToSet' in' $ addToSet'对存储无效。

    我的预期结果:

    在:

    {
       'username':'user1',
       'item': {'cars':['Merc','Ferrari'],'house':1}
    }
    

    预期之后:

    {
       'username':'user1',
       'name': {'first':'Marie', 'last':'Bender'},
       'item': {'cars':['Merc','Ferrari','BMW'],'house':1}
    }
    

1 个答案:

答案 0 :(得分:4)

您的第二次尝试更接近,但您需要使用$set运算符来设置name的值:

user_detail2 = {
    '$set': {'name': {'first': 'Marie', 'last': 'Bender'}},
    '$addtoset': {'items.cars': 'BMW'}    
}