Мне нужно обновить некоторые поля в документе Монго. Проблема, с которой я сталкиваюсь, некоторые могут быть нулевыми или пустыми, поэтому их не должно быть в списке $ set. Итак, я строю объединенную строку этих полей с допустимыми значениями и присваиваю ее переменной.
if ($value1 > '') {
$setFields = $setFields.", 'key1'".' => '.'$key1';
}
if ($value2 > '') {
$setFields = $setFields.", 'key2'".' => '.'$key2';
}
так далее…
$setFields = substr($setFields, 2);
$bulk->update(['id'=>$Id],['$set'=>[$setFields]);
и я получаю ошибку: модификаторы работают с полями, но вместо этого мы нашли массив типов. Например: {$ mod: {: …}} не {$ set: [«‘key1’ => $ value1, ‘key2’ => $ value2»]}
ошибка очевидна: конструкция должна быть
{$set: [ 'key1' => $value1, 'key2' => $value2 ]}
а не (php добавляет начало и конец двойных кавычек вокруг строки)
{$set: [ "'key1' => $value1, 'key2' => $value2" ]}
если я запускаю запрос, как это, он работает нормально:
$bulk->update(['id'=>$Id],['$set'=>['key1' => $value1, 'key2' => $value2]);
если заменить список полей на переменную $ setFields, он обрывается с вышеуказанной ошибкой
Задача ещё не решена.
Других решений пока нет …