Это решение больше (уточните c, чем generi c IMO) предполагает, что все строки в src
изначально начинаются с http
и их необходимо заменить на https
.
Начиная с MongoDB 4.2, вы можете использовать конвейер агрегации для операций обновления.
Идея: Это использование конвейера агрегации с использованием $map
, где все URL-адреса в src
, разделенные по 4-му индексу, соединяются с https с использованием $concat
и $substr
. И обновите свойство src
, используя $set
.
db.collection.updateMany({ src: { $exists: true } }, [
{
$set: {
src: {
$map: {
input: "$src",
as: "u",
in: {
$concat: [
"https",
{
$substr: ["$$u", 4, -1],
},
],
},
},
},
},
},
]);
ПРИМЕЧАНИЕ: $split
также можно использовать для настройки этого параметра вместо $substr
.
ИЗМЕНИТЬ / ОБНОВИТЬ: На основе комментариев, что некоторые URL-адреса уже могут начинаться с https
.
db.collection.updateMany({ src: { $exists: true } }, [
{
$set: {
src: {
$map: {
input: "$src",
as: "u",
in: {
$cond: {
if: {
$eq: [
{
$size: {
$split: ["$$u", "http:"],
},
},
2,
],
},
then: {
$concat: [
"https:",
{
$arrayElemAt: [
{
$split: ["$$u", "http:"],
},
1,
],
},
],
},
else: "$$u",
},
},
},
},
},
},
]);