Вы можете попробовать с помощью bulkWrite
const array = ["222", "876", "456", "789"]
db.myCollection.bulkWrite(
array.map((val) =>
({
updateOne: {
filter: { _id : obj._id },
update: { $set: { ["data.field_to_check." + val] : Math.round(obj.data.field_to_check[val]) + '' }},
}
})
)
)
Это требует зацикливания строк, созданных путем разрыва на новой строке, получения пары ключ / значение путем разрыва на @
, отдельных элементов для ключа путем разложения значения на |
, а затем окончательных пар ключ / значение. взорвав каждый элемент на :
$var = 'es@set:col-md-8 col-lg-4 col-xl-6|info:f1|but:md
fs@set:col-md-4 col-lg-8 col-xl-6|info:f4|but:md';
$arr = array();
foreach (explode("\n", $var) as $item) {
list($key, $value) = explode('@', $item);
foreach (explode('|', $value) as $val) {
list ($k, $v) = explode(':', $val);
$arr[$key][$k] = $v;
};
}
print_r($arr);
Вывод:
Array (
[es] => Array (
[set] => col-md-8 col-lg-4 col-xl-6
[info] => f1
[but] => md
)
[fs] => Array (
[set] => col-md-4 col-lg-8 col-xl-6
[info] => f4
[but] => md
)
)