2013-05-25 25 views
9

Senaryo: Aşağıdaki verilerle, MyCollection adlı bir koleksiyon yaşıyorum düşünün:ISO tarihinin dize alanında saklandığı MongoDB koleksiyonunda tarih aralığı nasıl sorgulanır?

{ 
    "_id" : 'MyUniqueID_01' 
    "CreatedTime" : "2013-12-01T14:35:00Z", 
    "LastModifiedTime" : "2013-12-01T13:25:00Z" 
} 

Şimdi verilerin yukarıda belirtilen tür belgelerin çok sayıda olduğu MongoDB veritabanını sorgulamak istiyorum. Ve benim sorgu $gt, $gte kullanarak yani tarih aralığına dayanır $lt & $lte

Yani benim sorgu gibi bir şey olabilir: beklenen sonucudur yukarıdaki örnekler göz önüne alındığında

db.MyCollection.find({ 'CreatedTime': {$gt: '2013-05-25T09:29:40.572Z'}}) 

, sorgu bir almak zorunda document ("CreatedTime": "2013-12-01T14: 35: 00Z" ifadesi "2013-05-25T09: 29: 40.572Z" sorgusundan geçen değerden daha büyüktür); oysa, sorun alan CreatedTime dizgisi biçimindedir.

Soru: Bugüne kadar dize alanı türünü değiştirmeden mükemmel benim beklenen sonuç elde böylece herhangi bir yolu var mı?

+1

Bu gibi ISO 8601 tarihli zaman dizeleri, tarih aralığı sorguları için düzgün çalışmalıdır. Bu formatın avantajlarından biri. Örnek sorgunuz, beklendiği gibi örnek dokümanı döndürür. – JohnnyHK

+0

@JohnnyHK: Teşekkürler ... Tam olarak benim yerel DB üzerinde çalışır ama aynı sunucu başarısız sunucuda beklenen yapmaz .. Herhangi bir sürüm bağımlılıkları var mı? –

+0

@AmolMKulkarni Merak etme, sunucuda neden işe yaramadığını buldunuz mu? Zaman aralıkları arasında sorgulama üzerinde çalışıyorum ve arama yaparken buna rastladım. – Raghuveer

cevap

9

Sorguları, örnekte yaptığınız gibi yapabilirsiniz.

Dizgi sıralaması tutarlı ve istediğiniz tam ilişkiyi verecektir.

+3

Evet, ancak sorgu dizesinin veri kümesiyle aynı zaman dilimi son ekini kullanması gerektiğini de eklerim (bu da veri dizgisini nasıl sakladığınıza dair başka bir kısıtlama da ekler) çünkü bir string karşılaştırması yapıyorsunuzdur. Örneğin, OP'nin örneği ISO 8601 UTC formundadır ('Z' soneki ile), dolayısıyla sorgu dizgesi aynı zamanda bu formda olmalıdır. –