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.