我有一个Brands集合,我必须将路径./assets/替换为D:/ data / db / images,在多个文档中都多次出现这种情况。如何使用查询来实现?
每个文档的样本
{"name":"Dell","images":["./assets/dell1.jpg","./assets/dell2.jpeg","./assets/dell3.jpg"],
"captions":["Yours is here","Easy as dell","Uniquely you"],
"logo":"./assets/dell4.png",
"details":{"headOffice":"Bangalore","address":"No.12/1, Divyashree Green, Koramangala Inner Ring Rd, Domlur, Bengaluru - 560071",
"phoneNumber":"(080) 28077000 ","website":"www.dell.com"}
}
答案 0 :(得分:1)
您可以使用Aggregation Framework的$out运算符将您的聚合输出重定向到特定集合。如果您指定相同的集合名称,则它将替换现有的集合。
要覆盖现有字段,可以使用$addFields运算符。然后,您只需使用$substr删除./assets/
的长度,并使用$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);
})