update() yöntemi, MongoDB belgelerini değiştirmek için kullanılan birincil yöntemdir. Güncelleme collection da sorgu kriterlere uyan tüm belgeleri güncelleyebilirsiniz.
Kullanımı ise şöyledir:
db.collection.update( <query>, <update>, <options> )
<query> : Sorgu, sql de wWHERE deyimine karşılık gelir.
<update> : Değişitirilecek kayıtlar, sql de SET deyimine karşılık gelir.
$set ifadesi
Bir kaydın değerinin güncellenmesi için kullanılır.
Örnek
> db.example.update (
{ _id : 4 },
{ $set:
{
'age' : 23
}
}
)
{ _id : 4 },
{ $set:
{
'age' : 23
}
}
)
Update işlemi, belgeye yeni alanlar eklemenizi de sağlar. Yani update işleminde hem istenilen alan güncellenir hem de belgeye yeni alanlar da ekleyebilirsiniz.
Örnek:
> db.example.update (
{ _id : 4 },
{ $set:
{
'country' : 'Turkey',
'age' : 25
}
}
)
{ _id : 4 },
{ $set:
{
'country' : 'Turkey',
'age' : 25
}
}
)
$unset ifadesi
update(), $unset operatörünü içeriyorsa belgeden alanı kaldırır. Yani bir alanı kaldırmak istiyorsak $unset ifadesini kullanabiliriz.
Örnek:
> db.example.update(
{ _id : 4 },
{ $unset:
{
'country' : 'Turkey'
}
}
)
{ _id : 4 },
{ $unset:
{
'country' : 'Turkey'
}
}
)
Konum belirterek element güncelleme
Güncelleştirme işlemi bir dizi alanında bir elemanın güncelleştirilmesi gerekiyorsa , elemanın konumu kullanılarak güncelleme yapılabilir.
Örnek olarak şöyle bir belge ekleyelim:
> db.ex.insert (
{
_id :1,
name : { first: 'Aaa', last: 'AAA'},
age: 23,
tags : ['JAVA', 'HTML', ' JQUERY', 'CSS'],
awards: [
{
"award" : "Onur Belgesi",
"year" : 2004,
"by" : "Lise 2"
},
{
"award" : "Okul Birinciligi",
"year" : 2006,
"by" : "Lise 4"
},
{
"award" : "Mezuniyet Derecesi",
"year" : 2010,
"by" : "Universite"
}
]
}
)
Şimdi ise tags'daki 'HTML' olan veriyi pozisyon yonetimi ile 'HTML5' olarak güncelleyeceğim.
> db.ex.update(
{ _id : 1},
{
$set :
{
'tags.1': 'HTML5'
}
}
)
{ _id : 1},
{
$set :
{
'tags.1': 'HTML5'
}
}
)
Programlama dilinde arraylarda index 0 dan başladığı için, üstteki örnekte "tags.1" deki 1 index i, "HTML" verisini işaret etmektedir.
Konumu bilinmeyen elementin güncellenmesi
Eger konumu bilinmiyorsa, pozisyon operatörü ($) kullanılarak güncelleme yapılabilir. Alanın güncellenmesi için, güncellenecek eleman değerinin sorgu alanında olması gerekiyor.Örnek
> db.ex.update(
{
_id : 1,
'tags': 'CSS'
},
{
$set :
{
'tags.$': 'CSS3'
}
}
)
Konumu bilinmeyip aynı hizada olan elementin güncellenmesi
eger güncellenecek bir array içindeyse ve konumu bilinmiyorsa; güncellenecek alan sorguda eklenir, güncellenecek kısmı da belgenin alt alanı ( "awards.$.by" gibi ) yazılarak yeni değer eklenir.
Örnek
> db.ex.update(
{
_id : 1,
'awards.by': 'Lise 4' // Eski değer
},
{
$set :
{
'awards.$.by': 'Lise 3' // Yeni değer
}
}
)
{
_id : 1,
'awards.by': 'Lise 4' // Eski değer
},
{
$set :
{
'awards.$.by': 'Lise 3' // Yeni değer
}
}
)
Çoklu döküman güncelleme
update() operatörünün multi özelliği true ya da 1, sorgu sonucunda eşleşen tüm belgeler güncellenir.
Örnek
db.bios.update(
{ 'awards.award': 'Turing' },
{ $set: { turing: true } },
{ multi: true }
)
{ 'awards.award': 'Turing' },
{ $set: { turing: true } },
{ multi: true }
)