2016-03-03 5 views
6

PHP के लिए नए मोंगो ड्राइवर को अपग्रेड करने के बाद, मुझे सॉर्टिंग और क्वेरीिंग की समस्या का सामना करना पड़ रहा है।मोंगोडेट बनाम यूटीसीडीएटीटाइम के साथ पूछताछ

पुराने चालक का उपयोग किया गया: http://php.net/manual/en/class.mongodate.php जो सेकंड में मोंगोडेट ऑब्जेक्ट में संग्रहीत तिथियां संग्रहीत करता है।

नया ड्राइवर: http://php.net/manual/en/class.mongodb-bson-utcdatetime.php दिनांक को एक अलग प्रारूप में संग्रहीत करता है और इसे मिलीसेकंड में संग्रहीत करता है।

ने $ gte या $ lte बेकार के साथ पूछताछ की है। उदाहरण:

$collection -> find(array('start_date' => array('$gte' => new MongoDate()))); 

$collection -> find(array('start_date' => array('$gte' => new MongoDB\BSON\UTCDateTime()))); 

ये दोनों एक ही परिणाम नहीं लौटते हैं। सभी पुराने डेटा के साथ, मैं मोंगोडेट और यूटीसीडीएटटाइम दोनों के साथ सुरक्षित रूप से अभी भी क्वेरी कैसे कर सकता हूं?

+0

आप [प्रोफाइलर सक्षम] सका (https://docs.mongodb.org/manual/reference /method/db.setProfilingLevel/) और दिखाएं कि दोनों ड्राइवर कौन से प्रश्न उत्पन्न करते हैं? –

+0

दस्तावेज के अनुसार, 'मोंगोडेट' के विपरीत, 'यूटीसीडीएटीटाइम' को मिलीसेकंड में टाइमस्टैम्प मैन्युअल रूप से पारित किया जाना चाहिए, जैसे कि 'नया यूटीसीडीएटीटाइम (राउंड (माइक्रोटाइम (सत्य) * 1000); '। यह आपके कोड को अमान्य और आपकी मदद करने के लिए पुन: उत्पन्न करने में असमर्थ है। – Parziphal

उत्तर

0

इसके बजाय आप सेकंड के मिलीसेकेंड में समय व्यतीत करने की जरूरत है, और सब कुछ की तरह से पहले काम करता रहेगा:

$time = time(); 
$cursor = $collection->find(['start_date' => ['$gte' => new MongoDB\BSON\UTCDateTime($time * 1000)]]); 
संबंधित मुद्दे