I am struggling with avatar URL update in nested objects array persisted in MongoDB.
Avatar URL needs to be updated from https://old.com/image.jpg
to https://new.com/image.jpg
Document structure is at the end of this post. I need to update avatar in three places:
organizer.avatar
– it works (see below or visit Mongo playground-organizer avatar)meetings[].owner.avatar
– similar issue found on StackOverflow, but it does not work beause of different docuement structure (see below or visti Mongo playground-owner avatar)meetings[].participants[].avatar
– I have not idea how to handle this.
Update organizer.avatar
It is pretty straightforward as you can see in Mongo playground-organizer avatar.
db.collection.update({},
[
{
"$set": {
"organizer.avatar": {
$replaceOne: {
input: "$organizer.avatar",
find: "https://old.com/",
replacement: "https://new.com/"
}
}
}
}
])
Update meetings[].owner.avatar
It iss similar to another issue reported on StackOverflow , but here avatar is nested inside owner
object. In this case, operator $mergeObjects
does not work as I would expect, because it does not merge objects, but overrides it – see Mongo playground-owner avatar. How to fix this?
db.collection.update({},
[
{
"$set": {
"meetings": {
$map: {
input: "$meetings",
in: {
$mergeObjects: [
{
owner: "$$this.owner"
},
{
owner: {
avatar: {
$replaceOne: {
input: "$$this.owner.avatar",
find: "https://old.com/",
replacement: "https://new.com/"
}
}
}
}
]
}
}
}
}
}
])
Update meetings[].participants[].avatar
When it comes to updating meetings[].participants[].avatar
– do you have any idea how to handle this?
Example document:
[
{
"_id": ObjectId("5a934e000102030405000000"),
"eventName": "Welcome Event",
"meetings": [
{
"owner": {
"avatar": "https://old.com/dwight-schrute.png",
"name": "Dwight Schrute"
},
"participants": [
{
"avatar": "https://old.com/kevin-malonoe.png",
"name": "Kevin Malonoe"
},
{
"avatar": "https://old.com/creed-bratton.png",
"name": "Creed Bratton"
}
]
},
{
"owner": {
"avatar": "https://old.com/jim-halpert.png",
"name": "Jim Halpert"
},
"participants": [
{
"avatar": "https://old.com/pam-beesly.png",
"name": "Pam Beesly"
}
]
}
],
"organizer": {
"avatar": "https://old.com/michale-scott.png",
"name": "Michael Scott"
}
}
]