2014-10-27 54 views
1

我有这样的代码:

db.basket.update(
    {'_id': ObjectId(data['basket_id'])}, 
    { 
     'total': round(total, 2), 
     '$push': { 
      products': { 
       'prod_id': data['prod_id'], 
       'price': price, 
       'amount': data['amount'] 
      } 
     } 
    } 
) 

运行该查询给我一个错误:

uncaught exception: field names cannot start with $ [$push] 

是否有可能在更新数据库中的字段对象并将新对象推入数组?

回答

2

您需要使用$set进行单个值更新。否则,这会尝试将更新的形式与一个普通对象和一个“更新”运算符混合。 MongoDB的认为这只是一个简单的对象更新,从而告诉你,“$推”是一个字段名非法:

db.basket.update(
    {'_id': ObjectId(data['basket_id'])}, 
    { 
     '$set': { 'total': round(total, 2) }, 
     '$push': { 
      products': { 
       'prod_id': data['prod_id'], 
       'price': price, 
       'amount': data['amount'] 
      } 
     } 
    } 
) 

因此,使用正确的操作在这里,让我们的MongoDB知道你正在尝试做的,并对其进行处理正确。其他update operators以同样的方式工作。只有在一起的地方。

+0

谢谢!完美的作品。我知道应该有一些窍门。 – hydeparkk 2014-10-27 23:13:29