在MongoDB中的一个查询中更新字段和$ push to array

时间:2014-10-27 22:55:37

标签: python mongodb pymongo mongodb-query

我有这段代码:

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]

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

1 个答案:

答案 0 :(得分:3)

您需要使用$set进行单值更新。否则,这会尝试将更新形式与普通对象和更新"进行混合。运营商。 MongoDB认为这只是一个简单的对象更新,因此告诉你" $ push"对于字段名称是非法的:

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以相同的方式工作。只有在一起的地方。