使用ArrayFilter的PHP MongoDB$集
我正在尝试使用带有ArrayFilter的$set运算符更新“attributes”中“position”的值 下面的命令在终端上按预期工作使用ArrayFilter的PHP MongoDB$集,php,mongodb,Php,Mongodb,我正在尝试使用带有ArrayFilter的$set运算符更新“attributes”中“position”的值 下面的命令在终端上按预期工作 db.produtos.insert( { "_id": 1, "nome":"Nome do Produto", "descricao":"Lorem ipsum dolor sit amet.", "atributos": [ { "id" : 1, "posicao" : 2 }, { "i
db.produtos.insert(
{
"_id": 1,
"nome":"Nome do Produto",
"descricao":"Lorem ipsum dolor sit amet.",
"atributos": [
{ "id" : 1, "posicao" : 2 },
{ "id" : 2, "posicao" : 1 },
{ "id" : 3, "posicao" : 3 }
]
}
)
db.produtos.update(
{"_id": 1 },
{
$set: {
"atributos.$[elem1].posicao": 1,
"atributos.$[elem2].posicao": 2,
"atributos.$[elem3].posicao": 3
}
},
{
arrayFilters: [
{ "elem1.id": 1 },
{ "elem2.id": 2 },
{ "elem3.id": 3 },
]
}
)
但是,当我尝试在PHP中创建相同的命令时,它不起作用
在我的测试中,文档被找到,但从未更新
只是为了解释一下,我得到了一个字符串的“attributes.id”,我装载了一个带有更新的数组和另一个要过滤的数组
<?php
$ids = explode(',', '1,2,3');
$update = [];
$filters = [];
$i = 1;
foreach ($ids as $linha) :
$update['atributos.$[elem'.$i.'].posicao'] = $i;
$filters[]['elem'.$i.'.id'] = $linha;
$i++;
endforeach;
$conexao = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$cmd = new MongoDB\Driver\Command(
[
'findAndModify' => 'produtos',
'query' => ['_id' => 1],
'update' => ['$set' => $update],
'upsert' => true,
'returnDocument' => true,
'new' => true,
'arrayFilters' => $filters,
]
);
$result = $conexao->executeCommand('teste', $cmd)->toArray();
$result = json_decode(json_encode($result), true);
echo '<pre>';
print_r($cmd);
print_r($result);