Запуск версии MongoDB> = 4.2
Операции обновления в MongoDB могут выполнять конвейер агрегации в них, проверьте: update-with-ag-aggregation-pipeline . Таким образом, вы можете попробовать следующий запрос:
db.Article.update(
{ $expr: { $eq: [{ $type: "$categories" }, "array"] } }, // Condition that checks `categories` exists & is an array.
[
{
$set: {
categories: {
$map: {
input: "$categories",
in: { $toUpper: "$$this" }
}
}
}
}
],
{ multi: true }
);
На всякий случай, если пара ваших элементов в массиве categories
не имеет типа string (Если массив categories
представляет собой смесь чисел & strings) тогда в in
части $map
вы можете иметь условие, такое как: * {$cond : [{$eq : [{$type : '$$this'},'string']},{ $toUpper: "$$this" } ,'$$this']}
Test: Тестировать конвейер агрегации здесь: mongoplayground
Примечание: Вы можете использовать .updateMany()
вместо .update()
с опцией {multi : true}
.