आपकी प्रतिक्रिया के लिए धन्यवाद। मैं अपने प्रारंभिक प्रश्न में अस्पष्ट था कि मैं संख्याओं को अद्यतन करने के लिए फ़ील्ड निर्दिष्ट नहीं करना चाहता था, बल्कि प्रत्येक संपत्ति को चलाता हूं और चेक करता हूं।
मैं एक साथ इस छोटे से समारोह डाल दिया है चाल करने के लिए:
var cursor = db.results.find();
while (cursor.hasNext()) {
var doc = cursor.next();
for (key in doc) {
if (key.match(/^metric_.*/i) && !isNaN(doc[key])) {
doc[key] = parseFloat(doc[key]);
db.results.update({ _id : doc._id }, doc);
}
}
}
दो बातें ध्यान रखें:
- यह केवल गुण के पहले स्तर पर जांच और रूपांतरण करता है। इसे गहराई से जाने के लिए आसानी से संशोधित किया जा सकता है, लेकिन इस समय मुझे इसकी आवश्यकता थी।
- यह फ़ंक्शन आपके दिनांक मूल्यों को दूर कर देगा !!! एक जावास्क्रिप्ट दिनांक का मूल्यांकन
isNaN
द्वारा गलत के रूप में किया जाता है, और इसलिए इसे एक संख्या के रूप में माना जाएगा। मेरे मामले में, parseFloat
का उपयोग करके वास्तव में मान को isNaN
पर सेट कर दिया जाएगा। फिर, दर्शक के लिए एक बहुत ही आसान फिक्स, लेकिन मैं बस उस अस्वीकरण प्रदान करना चाहता था।
आशा है कि यह मेरी स्थिति में किसी और की सहायता करेगी।
स्रोत
2013-02-13 21:03:44
mongodb 2.2 के रूप में, अद्यतन पहले पैरा के रूप में एक क्वेरी लेता है, इसलिए doc._id के बजाय {_id: doc._id}। –
'isNaN (doc.xyz)' के बजाय आपको अपने टाइपिंग "123" या "3456" होने पर 'typeof doc.xyz ==' string'' का उपयोग करना चाहिए। – ov1d1u
@ ov1d1u - मूल प्रश्न हालांकि विशेष रूप से 'isNaN' का उपयोग करने के बारे में पूछा गया, इसलिए मैंने इसे चुना। – WiredPrairie