![MongoDB: Oppdatere et array av objekter](https://kaffeogkode.no/1024x/kaffeogkode.no/etc/mongodb-oppdatere-et-array-av-objekter/simpleBlog-afe7c1bd-6085-4174-ba1b-142894ef4a43.png)
I MongoDB ender man ganske ofte opp med å ha dokumenter som inneholder array av objekter. Disse kan det noen ganger være vanskelig å skjønne hvordan man oppdaterer.
Her har jeg laget en bitteliten howto, også til meg selv :)
La oss si at jeg har en collection som heter blog
og inneholder mine fine blogg-artikler.
db.blog.find().pretty()
[
{
title: 'My life',
images: [
{
id: 1,
title: 'Image of my home',
tags: ['home'],
src: '/tmp/image-1.jpg',
},
{
id: 4,
title: 'Image of my cabin',
tags: ['cabin'],
src: '/tmp/image-2.jpg',
}
]
},
{
title: 'My cat',
images: [
{
id: 1,
title: 'Image of my home',
tags: ['home'],
src: '/tmp/image-1.jpg',
},
{
id: 9,
title: 'Image of my cat',
tags: ['cat'],
src: '/tmp/image-3.jpg',
}
]
}
]
Nå ønsker jeg å oppdatere title
på alle bildene med id = 1
. Hvordan gjør jeg det enklest mulig?
Her kommer MongoDB til unnsetning med sin fine $
operator.
id = 1
db.blog.update({
"img.id": 1
}, {
$set: {
"img.$.title": "Home sweet home"
},
$addToSet: {
"img.$.tags": [ "sweet", "home" ]
}
});
Dersom du bruker Mongoose og ønsker å gjøre dette i applikasjonen din, så må du aksessere native-mongo-modulen direkte.
Du finner alle native funksjoner i modellen sin collection
variabel.
Model.collection.updateMany({
"img.id": 1
}, {
$set: {
"img.$.title": "Home sweet home"
},
$addToSet: {
"img.$.tags": [ "sweet", "home" ]
}
});
Bli med å teste påmeldingsfunksjonen her.