Вы можете использовать оператор Aggregation Framework $ out , чтобы перенаправить вывод вашей агрегации в конкретную коллекцию.Если вы укажете то же имя коллекции, оно заменит существующую коллекцию.
Чтобы перезаписать существующее поле, вы можете использовать оператор $ addFields .Тогда вам просто нужно удалить длину ./assets/
, используя $ substr , и объединить ее с новым префиксом, используя $ concat
db.Brands.aggregate([
{
$addFields: {
images: {
$map: {
input: "$images",
as: "image",
in: {
$concat: [ "D:/data/db/images", { $substr: [ "$$image", 8, { $strLenBytes: "$$image" } ] } ]
}
}
}
}
},
{ $out: "Brands" } //replaces existing collection
])
В MongoDB 3.2 выможет запустить следующий скрипт:
db.Brands.find().forEach(function(doc){
doc.images = doc.images.map(function(image){ return image.replace("./assets/","D:/data/db/images/") })
db.Brands.save(doc);
})