mongodb $ inc一个数组内的字段

时间:2014-05-31 07:02:31

标签: php mongodb

我有以下数组结构

Array
(
    [_id] => MongoId Object
        (
            [$id] => 538978ce8ead0ec1048b456c
        )

    [cartId] => 98374319ff71dbc3a84b842b7a443cf7
    [products] => Array
        (
            [0] => Array
                (
                    [productId] => 100343
                    [quantity] => 17
                    [name] => a
                )

            [1] => Array
                (
                    [productId] => 100344
                    [quantity] => 3
                    [name] => ab
                )

            [2] => Array
                (
                    [productId] => 100345
                    [quantity] => 1
                    [name] => abc
                )

        )

我在根据productId

增加产品数量方面遇到了问题

我现在使用位置但我没有id

的参考
 $oCartsCollection->update(array('cartId'=>'98374319ff71dbc3a84b842b7a443cf7'), array('$inc' => array('products.0.quantity'=>1)));

1 个答案:

答案 0 :(得分:1)

您需要做的是添加查询以从数组中选择和元素,然后使用positional $运算符来匹配该位置:

$oCartsCollection->update(
    array(
        'cartId'=>'98374319ff71dbc3a84b842b7a443cf7',
        'products.productId' => 100343
     ), 
    array('$inc' => array('products.$.quantity'=>1)));

" dot"在这种情况下,符号方法适用于访问productId元素。要匹配多个字段,请使用$elemMatch代替

$oCartsCollection->update(
    array(
        'cartId'=>'98374319ff71dbc3a84b842b7a443cf7',
        'products' => array(
            '$elemMatch' => array(
                'productId' => 100343,
                'name' => 'a'
            )
        )
     ), 
    array('$inc' => array('products.$.quantity'=>1)));