I have a collection called "Image", below is 1 document of the Image collection:
{
"_id" : ObjectId("6234342df8afb4001e279ecc"),
"is_deleted" : false,
"labels" : [
{
"_id" : ObjectId("623d687e745109001e09f146"),
"labelId" : ObjectId("623d6821745109001e09f04e"),
"xmin" : 0.400763358778626,
"xmax" : 0.614503816793893,
"ymin" : 0.694300518134715,
"ymax" : 0.906735751295337
}
],
"img_name" : "6910486605301182464.jpg",
"img_originalname" : "images (11).jpg",
"img_desc" : "Cyber Sercurity multi upload",
"img_uri" : "http://localhost:8080/resources/images/2022/3/18/6910486605301182464.jpg",
"img_path" : "/resources/images/2022/3/18/6910486605301182464.jpg",
"datasetId" : ObjectId("6234342df8afb4001e279eca"),
"createdAt" : ISODate("2022-03-18T07:26:37.422Z"),
"updatedAt" : ISODate("2022-03-25T07:00:14.074Z"),
"__v" : 0
}
In this document, I have a field img_uri
whose value currently starts with "http://localhost:8080". But now I want to find all documents with img_uri
‘s value is "http://localhost:8080" to replace with my domain img_uri = "https://example.com"
and so the above document will look like this:
{
"_id" : ObjectId("6234342df8afb4001e279ecc"),
"is_deleted" : false,
"labels" : [
{
"_id" : ObjectId("623d687e745109001e09f146"),
"labelId" : ObjectId("623d6821745109001e09f04e"),
"xmin" : 0.400763358778626,
"xmax" : 0.614503816793893,
"ymin" : 0.694300518134715,
"ymax" : 0.906735751295337
}
],
"img_name" : "6910486605301182464.jpg",
"img_originalname" : "images (11).jpg",
"img_desc" : "Cyber Sercurity multi upload",
"img_uri" : "https://example.com/resources/images/2022/3/18/6910486605301182464.jpg",
"img_path" : "/resources/images/2022/3/18/6910486605301182464.jpg",
"datasetId" : ObjectId("6234342df8afb4001e279eca"),
"createdAt" : ISODate("2022-03-18T07:26:37.422Z"),
"updatedAt" : ISODate("2022-03-25T07:00:14.074Z"),
"__v" : 0
}
2
Answers
Filter – The document with
img_uri
starts with "http://localhost:8080" via$regex
.Work the update with aggregation pipeline, set the
img_uri
by replacing "http://localhost:8080" with "https://example.com" via$replaceOne
.With
{ multi: true }
to update all the filtered documents.Sample Mongo Playground
The solution provided by Yong Shun works fine for Mongodb version 4.4 and above, if you are using a lesser version, try this:
Here’s the playground link.