MongoDB Döküman Verisi Güncelleme mongo shell Kullanarak
Bu bölümde, MongoDB döküman verisinin mongo shell aracılığıyla nasıl güncelleneceğini tanıtacağım. MongoDB, farklı türdeki operatörler tarafından uygulanan farklı güncelleme yöntemlerini destekler ve ayrıca birden fazla güncelleme işlevini de destekler.
Test Verilerini Hazırlama
Envanter koleksiyonuna bir dizi test verisi ekleyin.
db.inventory.insertMany( [
{ item: "tuval", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
{ item: "günlük", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "paspas", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
{ item: "fare pedi", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
{ item: "defter", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
{ item: "kağıt", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planlayıcı", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "kartpostal", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
{ item: "eskiz defteri", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "eskiz pad", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
] );
Güncelleme Operatörü Sözdizimi
MongoDB, belgeleri güncellemek için çeşitli güncelleme operatörleri (ör. $set) sağlar ve alan değerlerini değiştirmek için bu operatörleri kullanır.
Güncelleme operatörü parametrelerinin formatı aşağıdaki gibidir:
{
<güncelleme operatörü>: { <alan1>: <değer1>, ... },
<güncelleme operatörü>: { <alan2>: <değer2>, ... },
...
}
Açıklama:
- <güncelleme operatörü>: Güncelleme operatörü
-
: Alan adı - <değer1>: Alan parametresi
$set Operatörü
Alanları güncellemek için kullanılır ve alan mevcut değilse yeni bir alan oluşturur.
Tek Bir Belgeyi Güncelleme
db.collection.updateOne() yöntemini kullanarak bir belgeyi güncelleyin.
db.inventory.updateOne(
{ item: "kağıt" },
{
$set: { "size.uom": "cm", status: "P" },
$currentDate: { lastModified: true }
}
)
Güncelleme açıklaması:
- İlk olarak, sorgu koşulunu (item = kağıt) kullanarak ilk belgeyi alın.
- $set operatörünü kullanarak size.uom alanının değerini cm olarak ve status alanının değerini P olarak güncelleyin.
- $currentDate operatörünü kullanarak lastModified alanının değerini mevcut tarihe güncelleyin. lastModified alanı mevcut değilse, $currentDate alanı oluşturacaktır.
Birden Fazla Belgeyi Güncelleme
Koşulu karşılayan birden fazla belgeyi güncellemek için db.collection.updateMany() yöntemini kullanın.
db.inventory.updateMany(
{ "qty": { $lt: 50 } },
{
$set: { "size.uom": "in", status: "P" },
$currentDate: { lastModified: true }
}
)
Güncelleme açıklaması:
- İlk olarak, (qty < 50) koşulu kullanarak tüm belgeleri alın.
- $set operatörünü kullanarak size.uom alanının değerini in olarak ve status alanının değerini P olarak güncelleyin.
- $currentDate operatörünü kullanarak lastModified alanının değerini mevcut tarihe güncelleyin. lastModified alanı mevcut değilse, $currentDate alanı oluşturacaktır.
İpucu: $lt operatörü, "den daha az" anlamını temsil eder.
Belgeyi Değiştir
db.collection.replaceOne() metodunu kullanarak belgenin içeriğini (id alanı hariç) değiştirin. Değiştirme belgesi, orijinal belgeden farklı alanlara sahip olabilir. _id alanı değişmez olduğundan, ihmal edilebilir. Ancak _id alanını dahil ederseniz, id değeri güncellenen belgenin id'siyle tutarlı olmalıdır.
db.inventory.replaceOne(
{ item: "paper" },
{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)
Açıklama:
- İlk olarak, sorgu kriterleri (ürün=kağıt) kullanılarak ilk belge alınır.
- İkinci parametrenin içeriği ile eşleşen belgeyi değiştirin.
Güncelleme Davranışı
Atomluk
MongoDB'deki tüm yazma işlemleri, bireysel belge düzeyinde atomiktir.
_id Alanı
_id alanı değişmezdir ve güncellenemez.