2013-02-07 18 views
16

मैं निम्नलिखित mongoexport कॉल का उपयोग करके मेरी MongoDB से एक निश्चित दिन के लिए किए गए आदेश प्राप्त करने के लिए कोशिश कर रहा हूँ:

mongoexport --db store --collection user_data --query "{'order.created_order':{$gt:ISODate("2013-02-05T00:00:00.000Z"),$lt:ISODate("2013-02-06T00:00:00.000Z")}, 'order.status':'paid'}" --out ordersfeb6.json

लेकिन मैं इस समय का सामना कर रहा हूँ निम्न त्रुटि:

Thu Feb 7 18:33:43 Assertion: 10340:Failure parsing JSON string near: 'order.cre 
0x56a223 0x5712e5 0x53e0f7 0x53e21e 0x8b7739 0x524f2b 0x5258a3 0x7fa7b77bd76d 0x525975 
mongoexport(_ZN5mongo15printStackTraceERSo+0x23) [0x56a223] 
mongoexport(_ZN5mongo11msgassertedEiPKc+0xc5) [0x5712e5] 
mongoexport(_ZN5mongo8fromjsonEPKcPi+0x377) [0x53e0f7] 
mongoexport(_ZN5mongo8fromjsonERKSs+0xe) [0x53e21e] 
mongoexport(_ZN6Export3runEv+0x489) [0x8b7739] 
mongoexport(_ZN5mongo4Tool4mainEiPPc+0x72b) [0x524f2b] 
mongoexport(main+0x23) [0x5258a3] 
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7fa7b77bd76d] 
mongoexport() [0x525975] 
assertion: 10340 Failure parsing JSON string near: 'order.cre 

इस सवाल mongoexport JSON parsing error से मुझे पता है कि जावास्क्रिप्ट मोंगो प्रश्नों के कुछ भागों का मूल्यांकन किया जाता है। मैं सोच रहा था: क्या $ gt और $ lt ऑपरेटरों को जावास्क्रिप्ट की आवश्यकता है और क्या यह मेरी समस्या है? यदि नहीं, तो मुझे यकीन नहीं है कि मेरी क्वेरी में क्या गलत है और किसी भी सुझाव की सराहना की जाएगी। पढ़ने के लिए धन्यवाद!

उत्तर

51

यहां मुद्दा यह है कि आप तिथियों का प्रतिनिधित्व कैसे कर रहे हैं, उन्हें Date प्रकारों और युग प्रारूप में पारित करने की आवश्यकता है। ऐसा करें:

mongoexport --db store --collection user_data --query '{"order.created_order":{$gt:new Date(1360040400000),$lt:new Date(1360990800000)}, "order.status" : "paid"}' --out ordersfeb6.json 

आप युग को ISODate कन्वर्ट करने के लिए देख रहे हैं, सिर्फ खोल में तारीख कहते हैं, कुछ इस तरह:

> new Date(2013,01,16)*1 
1360990800000 

तो सत्यापित करने के लिए:

> new Date(1360990800000) 
ISODate("2013-02-16T05:00:00Z") 

अद्यतन:imcaptor द्वारा टिप्पणियों में उल्लेख किया गया है, यह महीना Date constru में शून्य आधारित (0 = जनवरी, 11 = दिसंबर) है सीटीओआर, कुछ ज्यादा उम्मीद नहीं करेगा, और भूलना आसान है। मैंने ऊपर दिए गए उदाहरण में 01 में पास किया और फरवरी की तारीख प्राप्त की, जैसा कि आप सत्यापन से आईएसओडीएट में देख सकते हैं।

+0

आपकी मदद के लिए बहुत बहुत धन्यवाद! यह बहुत उपयोगी था। – Leah

+1

@ एडम। जवाब के लिए धन्यवाद। क्या $ lt $ gt ऑपरेटरों के विपरीत प्रश्नों के शीर्षक को बदलने के लिए उचित होगा (जैसा कि आपका उत्तर स्पष्ट करता है)? अगर ऐसा होता तो मुझे आपका जवाब बहुत तेज़ लगता। –

+0

शायद एक संपादन का सुझाव देने के लिए एक अच्छा विचार हो सकता है, अगर आपको लगता है कि यह अधिक खोजे जा सकता है, तो शायद इस तथ्य में केवल $ lt और $ gt तारीख के लिए हैं –