$reduce आपके उपयोग के मामले में बेहतर फिट बैठता है:
स्यूडोकोड
value = url.split("_2000x")[0]
for (item: url.split("_2000x")[1:])
value += "_850x" + item
db.collection.aggregate([
{
$match: {
imageUrl: {
$regex: "_2000x"
},
brand: "Goat The Label"
}
},
{
$addFields: {
imageUrl: {
$reduce: {
input: {
$slice: [
{
$split: [
"$imageUrl",
"_2000x"
]
},
1,
{
$size: {
$split: [
"$imageUrl",
"_2000x"
]
}
}
]
},
initialValue: {
$arrayElemAt: [
{
$split: [
"$imageUrl",
"_2000x"
]
},
0
]
},
in: {
$concat: [
"$$value",
"_850x",
"$$this"
]
}
}
}
}
}
])
संपादित करें: बैश शेल के माध्यम से निष्पादित करने के लिए:
विंडोज़:
इसके साथ temp.js फ़ाइल बनाएँ:
db.collection.aggregate(...).forEach(...)
के साथ temp.bat फ़ाइल बनाएँ:
@echo off
path/to/mongo.exe --uri put_here_mongodb+srv temp.js
अब चलाएँ:temp.bat
यूनिक्स:
इसके साथ temp.js फ़ाइल बनाएँ:
db.collection.aggregate(...).forEach(...)
के साथ temp.bat फ़ाइल बनाएँ:
#!/bin/bash
path/to/mongo --uri put_here_mongodb+srv temp.js
निष्पादन की अनुमति दें:chmod u+x temp.sh
अब चलाएँ:./temp.sh