您好我有以下数组,我想用productId 100343
拉数组Array(
[_id] => MongoId Object
(
[$id] => 5388a02c8ead0ebf048b4569
)
[cartId] => 14ce496ac194d5d8ee8d0cd11bd3ef5a
[products] => Array
(
[100343] => Array
(
[productId] => 100343
[quantity] => 13
[name] => a
)
[100344] => Array
(
[productId] => 100344
[quantity] => 3
[name] => ab
)
[100345] => Array
(
[productId] => 100345
[quantity] => 1
[name] => abc
)
)
)
我试过这样但是它没有用
$c->update(
$aQuery,
array(
'$pull' => array('products'=>array('productId'=>'100343'))
)
);
答案 0 :(得分:1)
那不是数组。 MongoDB中的数组在概念上与PHP调用数组不同,因此您在那里的结构与此JSON表示相同:
{
"products": {
"100343": {
"productId": 100343,
"quantity": 13,
"name": "a"
},
"100344": {
"productId": 100344,
"quantity": 3,
"name": "ab"
},
"100345": {
"productId": 100345,
"quantity": 1,
"name": "abc"
}
}
}
这种结构只是子文档的使用,并不是MongoDB使用的意义上的数组。要使用此结构删除条目,请使用$unset
运算符。
$c->update(
$aQuery,
array(
'$unset' => array('products.productId.100343' => "")
)
);
但实际上您需要更改数据,因此要为MongoDB序列化正确的数组,您需要构建如下代码:
$data = array(
"products" => array(
array(
"productId" => 100343,
"quantity" => 13,
"name" => "a"
),
array(
"productId" => 100344,
"quantity" => 3,
"name" => "ab"
),
array(
"productId" => 100345,
"quantity" => 1,
"name" => "abc"
)
)
);
这会产生一个如下所示的JSON结构:
{
"products":[
{
"productId":100343,
"quantity":13,
"name":"a"
},
{
"productId":100344,
"quantity":3,
"name":"ab"
},
{
"productId":100345,
"quantity":1,
"name":"abc"
}
]
}
这就是MongoDB所谓的数组,所以现在你可以正确使用$pull
运算符:
$c->update(
$aQuery,
array(
'$pull' => array( 'products.productId' => 100343 )
)
);