सबसे पहले, मैं मोंगोडब के लिए काफी नया हूं। मेरा प्रश्न यह है कि मैं समाधान ढूंढने में सक्षम नहीं हूं।सभी मोंगो संग्रहों के माध्यम से लूप और क्वेरी निष्पादित करें
मान लें कि मेरे पास 3 अलग-अलग संग्रह हैं।
mongos> show collections
collectionA
collectionB
collectionC
मैं एक स्क्रिप्ट है कि इस डेटाबेस इंडस्ट्रीज़ सभी संग्रह से अधिक iterates बना सकते हैं और इन संग्रहों में से प्रत्येक में पिछले डाला टाइमस्टैम्प लगाना चाहते हैं। यहां मोंगो के अंदर क्या काम करता है।
var last_element = db.collectionA.find().sort({_id:-1}).limit(1);
printjson(last_element.next()._id.getTimestamp());
ISODate("2014-08-28T06:45:47Z")
1. समस्या (सभी संग्रह से अधिक दोहराएं)
वहाँ sth करने के लिए किसी भी संभावना है। पसंद।
var my_collections = show collections;
my_collections.forEach(function(current_collection){
print(current_collection);
});
समस्या यहां, my_collections
के लिए असाइनमेंट काम नहीं करता है। मुझे SyntaxError: Unexpected identifier
मिलता है। क्या मुझे 'शो' कथन उद्धृत करने की ज़रूरत है? क्या यह भी संभव है?
2. समस्या (जे एस वर में संग्रह भंडारण)
मैं समस्या 1 वैकल्पिक हल कर सकते हैं ऐसा करने से:
var my_collections = ["collectionA", "collectionB", "collectionC"];
my_collections.forEach(function(current_collection){
var last_element = db.current_collection.find().sort({_id:-1}).limit(1);
print(current_collection);
printjson(last_element.next()._id.getTimestamp());
});
last_element.next()
निम्न त्रुटि पैदा करता है:
error hasNext: false at src/mongo/shell/query.js:124
ऐसा लगता है कि last_element सही ढंग से सहेजा नहीं गया है।
मैं क्या गलत कर रहा हूं पर कोई सुझाव ??
अद्यतन
नील्स जवाब मुझे इस समाधान के लिए सीसा। उसके कोड के अलावा मुझे यह जांचना पड़ा कि फ़ंक्शन getTimestamp
वास्तव में मौजूद है या नहीं। कुछ 'आभासी' संग्रहों के लिए कोई _id संपत्ति प्रतीत नहीं होती है।
db.getCollectionNames().forEach(function(collname) {
var last_element = db[collname].find().sort({_id:-1}).limit(1);
if(last_element.hasNext()){
var next = last_element.next();
if(next._id !== undefined && typeof next._id.getTimestamp == 'function'){
printjson(collname + " >> "+next._id.getTimestamp());
}else{
print(collname + " undefined!! (getTimestamp N/A)")
}
}
});
बस यहां स्पष्ट करने के लिए। एकमात्र कारण '.getTimeStamp()' यहां विफल होगा यह है कि आपके पास वास्तव में प्रत्येक दस्तावेज़ में प्राथमिक कुंजी '_id' फ़ील्ड में 'ऑब्जेक्ट आईडी' नहीं है। आपको ** वास्तव में यह देखना चाहिए, भले ही मोंगोडीबी आपको "स्कीमलेस" के रूप में फ़ील्ड में प्रकारों को मिश्रण करने की अनुमति दे, ** आपको ** सामान्य अभ्यास के रूप में ऐसा नहीं करना चाहिए और वास्तव में इसे ठीक करना चाहिए जहां प्रविष्टियां सुसंगत बनाने के लिए होती है। –
उस नोटिस के लिए धन्यवाद! जैसा कि कहा गया है कि मैं मोंगो के लिए काफी नया हूं और एक रिलेशनल डीबी पृष्ठभूमि से आया हूं। मुझे अभी भी यकीन नहीं है कि ये संग्रह कैसे बनाए गए थे और न ही उनके पास कोई ऑब्जेक्ट आईडी क्यों है। जैसा कि आपने कहा है कि मुझे इसे सही करने की आवश्यकता होगी और क्यों और कैसे समझने की आवश्यकता है। धन्यवाद! – cb0