【问题标题】:$addToSet, along with updating other fields?$addToSet,以及更新其他字段?
【发布时间】:2015-03-31 02:35:41
【问题描述】:

我在使用 Pymongo 更新 MongoDB 中涉及添加到列表和更新某些字段的文档时遇到问题。

总而言之,我想:

  1. 向 a 列表添加一个值。
  2. 更新一些字段。
  3. 使用单个更新语句。

我尝试了两种方法,但都不起作用:

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' 中的美元 ($) 前缀字段 '$addToSet' 对存储无效。

我的预期结果:

之前:

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

打算用于:

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

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-11
      • 2023-03-30
      • 2016-08-02
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多