खोज…


टिप्पणियों

अक्सर अपने डेटाबेस पर रखरखाव स्क्रिप्ट चलाना आवश्यक होता है। फ़ील्ड्स का नाम बदल जाता है; डेटा संरचनाएं बदल जाती हैं; आपके द्वारा उपयोग की जाने वाली सुविधाएँ हटा दी जाती हैं; सेवाएँ माइग्रेट हो जाती हैं। जिन कारणों से आप अपना स्कीमा बदलना चाहते हैं, उनकी सूची बहुत असीम है। तो, 'क्यों' सुंदर आत्म व्याख्यात्मक है।

'कैसे' थोड़ा अधिक अपरिचित है। उन लोगों के लिए जो SQL फ़ंक्शन के आदी हैं, उपरोक्त डेटाबेस स्क्रिप्ट अजीब दिखेंगी। लेकिन ध्यान दें कि वे सभी जावास्क्रिप्ट में कैसे हैं, और वे उसी एपीआई का उपयोग कर रहे हैं जैसा कि हम सर्वर और क्लाइंट दोनों पर, उल्का में उपयोग करते हैं। हमारे पास हमारे डेटाबेस, सर्वर और क्लाइंट के माध्यम से एक संगत एपीआई है।

उल्का मोंगो शेल से स्कीमा माइग्रेशन कमांड चलाएँ:

# run meteor
meteor

# access the database shell in a second terminal window
meteor mongo

एक संग्रह में सभी रिकॉर्ड्स में संस्करण फ़ील्ड जोड़ें

db.posts.find().forEach(function(doc){
    db.posts.update({_id: doc._id}, {$set:{'version':'v1.0'}}, false, true);
});

निकालें एक संग्रह में सभी रिकॉर्ड से सरणी

db.posts.find().forEach(function(doc){
    if(doc.arrayOfObjects){
        // the false, true at the end refers to $upsert, and $multi, respectively   
        db.accounts.update({_id: doc._id}, {$unset: {'arrayOfObjects': "" }}, false, true);
    }
});

संग्रह का नाम बदलें

db.originalName.renameCollection("newName" );

फ़ील्ड युक्त विशिष्ट स्ट्रिंग खोजें

रेगेक्स की शक्ति के साथ बड़ी जिम्मेदारी आती है ...।

db.posts.find({'text': /.*foo.*|.*bar.*/i})

पुराने से नया क्षेत्र बनाएँ

db.posts.find().forEach(function(doc){
    if(doc.oldField){
        db.posts.update({_id: doc._id}, {$set:{'newField':doc.oldField}}, false, true);
    }
});

एक नए क्षेत्र में एक ऐरे और जगह से वस्तुओं को खींचो

db.posts.find().forEach(function(doc){
    if(doc.commenters){
        var firstCommenter = db.users.findOne({'_id': doc.commenters[0]._id });
        db.clients.update({_id: doc._id}, {$set:{'firstPost': firstCommenter }}, false, true);

        var firstCommenter = db.users.findOne({'_id': doc.commenters[doc.commenters.length - 1]._id });
        db.clients.update({_id: doc._id}, {$set:{'lastPost': object._id }}, false, true);
    }
});

एक और संग्रह में एक संग्रह से बूँद रिकॉर्ड (यानी निकालें और समतल निकालें)

db.posts.find().forEach(function(doc){
    if(doc.commentsBlobId){
        var commentsBlob = db.comments.findOne({'_id': commentsBlobId });
        db.posts.update({_id: doc._id}, {$set:{'comments': commentsBlob }}, false, true);
    }
});

सुनिश्चित करें कि फील्ड एक्जिस्ट करें

db.posts.find().forEach(function(doc){
    if(!doc.foo){
        db.posts.update({_id: doc._id}, {$set:{'foo':''}}, false, true);
    }
});

Make Sure Field का विशिष्ट मूल्य है

db.posts.find().forEach(function(doc){
    if(!doc.foo){
        db.posts.update({_id: doc._id}, {$set:{'foo':'bar'}}, false, true);
    }
});

यदि विशिष्ट फ़ील्ड विशिष्ट मान है, तो रिकॉर्ड निकालें

db.posts.find().forEach(function(doc){
    if(doc.foo === 'bar'){
        db.posts.remove({_id: doc._id});
    }
});

फ़ील्ड के विशिष्ट मान को नए मान में बदलें

db.posts.find().forEach(function(doc){
    if(doc.foo === 'bar'){
        db.posts.update({_id: doc._id}, {$set:{'foo':'squee'}}, false, true);
    }
});

अशक्त विशिष्ट क्षेत्र को अशक्त करना

db.posts.find().forEach(function(doc){
    if(doc.oldfield){
        // the false, true at the end refers to $upsert, and $multi, respectively
        db.accounts.update({_id: doc._id}, {$unset: {'oldfield': "" }}, false, true);
    }
});

स्ट्रिंग में ObjectId कन्वर्ट

db.posts.find().forEach(function(doc){
     db.accounts.update({_id: doc._id}, {$set: {'_id': doc._id.str }}, false, true);
});

संख्याओं से स्ट्रिंग्स तक फ़ील्ड मान परिवर्तित करें

var newvalue = "";
db.posts.find().forEach(function(doc){
     if(doc.foo){
         newvalue = '"' + doc.foo + '"';
         db.accounts.update({_id: doc._id}, {$set: {'doc.foo': newvalue}});
     }
});

फ़ील्ड मान को स्ट्रिंग्स से संख्याओं में परिवर्तित करें

var newvalue = null;
db.posts.find().forEach(function(doc){
     if(doc.foo){
         newvalue = '"' + doc.foo + '"';
         db.accounts.update({_id: doc._id}, {$set: {'doc.foo': newvalue}});
     }
});

_Id फ़ील्ड में एक ऑब्जेक्ट से टाइमस्टैम्प बनाएं

db.posts.find().forEach(function(doc){
    if(doc._id){
        db.posts.update({_id: doc._id}, {$set:{ timestamp: new Date(parseInt(doc._id.str.slice(0,8), 16) *1000) }}, false, true);
    }
});

दिनांक ऑब्जेक्ट से एक ऑब्जेक्ट बनाएं

var timestamp = Math.floor(new Date(1974, 6, 25).getTime() / 1000);
var hex       = ('00000000' + timestamp.toString(16)).substr(-8); // zero padding
var objectId  = new ObjectId(hex + new ObjectId().str.substring(8));

एक एरियर में आइटम है कि सभी रिकॉर्ड का पता लगाएं

हम यहां क्या कर रहे हैं डॉट नोटेशन का उपयोग करके सरणी इंडेक्स को संदर्भित कर रहा है

db.posts.find({"tags.0": {$exists: true }})


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow