MongoDB veritabanınızda tarihleri verimli bir şekilde yönetmek, doğru sorgulama ve sıralama için çok önemlidir. Bununla birlikte, veri girişi genellikle tarihlerin optimal Date
türü yerine dize olarak depolanmasına neden olur. Bu makale, bu dize gösterimlerini doğru MongoDB Date
nesnelerine dönüştürmek için çeşitli yöntemleri ayrıntılarıyla açıklayarak veritabanınızın performansını ve veri bütünlüğünü artırır.
İçindekiler:
- Tarih ve Dize Veri Türleri Oluşturma
- MongoDB’de Dizeleri Tarihe Dönüştürme
$toDate
Operatörünü Kullanma$convert
Operatörünü KullanmadateFromString
Operatörü (Kullanımdan Kaldırılmış)- Yerinde Güncellemeler İçin
$set
Operatörünü Kullanma - Zaman Damgaları İçin
$clockTime
Kullanma
Tarih ve Dize Veri Türleri Oluşturma
Hem dize hem de tarih veri türlerine sahip belgelerin nasıl oluşturulacağını anlamak çok önemlidir. Bu bölüm sorunu gösterir ve dönüştürme çözümleri için zemin hazırlar.
MongoDB Kabuğunu Kullanma:
// Dize tarihli bir belge ekleme
db.myCollection.insertOne({
_id: 1,
dateString: "2024-10-27"
});
// Doğru Tarih nesneli bir belge ekleme
db.myCollection.insertOne({
_id: 2,
dateObject: ISODate("2024-10-27T00:00:00Z")
});
Burada, dateString
tarihi bir dize olarak depolar, dateObject
ise doğru ISODate
biçimini kullanır. Amacımız dateString
‘i dateObject
ile karşılaştırılabilir bir biçime dönüştürmektir.
MongoDB’de Dizeleri Tarihe Dönüştürme
Birkaç MongoDB operatörü bu dönüştürmeyi kolaylaştırır. En uygun seçim, belirli ihtiyaçlarınıza ve dize tarihlerinizin biçimine bağlıdır.
$toDate
Operatörünü Kullanma
$toDate
operatörü en basit ve en çok önerilen yaklaşımdır. Bir tarih dizesi alır ve bir Date
nesnesi döndürür. Giriş dizesinin tanınabilir bir tarih biçimine (örneğin, ISO 8601) uyması gerekir.
db.myCollection.aggregate([
{
$project: {
_id: 1,
convertedDate: { $toDate: "$dateString" }
}
}
]);
Bu toplama boru hattı, dateString
‘i convertedDate
‘de saklanan bir Date
nesnesine dönüştürür. Dize geçersizse, $toDate
null
döndürür.
$convert
Operatörünü Kullanma
$convert
operatörü, giriş ve çıkış türlerinin açıkça belirtilmesine izin vererek daha fazla esneklik sunar. Bu, daha az standart tarih dize biçimleri için değerlidir.
db.myCollection.aggregate([
{
$project: {
_id: 1,
convertedDate: {
$convert: {
input: "$dateString",
to: "date",
onError: null,
onNull: null
}
}
}
}
]);
onError
ve onNull
sırasıyla dönüştürme hatalarını ve null değerlerini işler. Bunları null
olarak ayarlamak, başarısız olursa null
döndürür.
dateFromString
Operatörü (Kullanımdan Kaldırılmış)
Daha önce kullanılabilir olsa da, dateFromString
kullanımdan kaldırılmıştır. Daha iyi uyumluluk için $toDate
veya $convert
kullanın.
Yerinde Güncellemeler İçin $set
Operatörünü Kullanma
update
yöntemi ile kullanılan $set
operatörü, mevcut belgeleri doğrudan değiştirir.
db.myCollection.updateMany(
{},
{ $set: { dateObject: { $toDate: "$dateString" } } }
);
Bu, dönüştürülen tarihi içeren bir dateObject
alanı ekleyerek tüm belgeleri günceller. Orijinal dateString
kalır. Bu, belgeleri doğrudan değiştirdiği için dikkatli olun.
Zaman Damgaları İçin $clockTime
Kullanma
$clockTime
doğrudan dize-tarih dönüştürme için değil, ancak belirli senaryolar için kullanışlıdır. Mevcut sunucu zamanını BSON zaman damgası olarak sağlar. Bu, mevcut dize tarihlerini dönüştürmek yerine, mevcut sunucu zamanına göre bir zaman damgası eklerken alakalıdır.
Dize-tarih dönüştürme sırasında verilerinizi her zaman doğrulayın ve olası hataları ele alın. Verilerinize ve uygulama ihtiyaçlarınıza en uygun yöntemi seçin. Çoğu durumda, $toDate
verimli ve temiz bir çözümdür.