Zoeken…


Opmerkingen

Het is vaak nodig om onderhoudsscripts in uw database uit te voeren. Velden worden hernoemd; datastructuren worden gewijzigd; functies die u gebruikte om te ondersteunen, worden verwijderd; services worden gemigreerd. De lijst met redenen waarom u uw schema mogelijk wilt wijzigen, is vrij onbeperkt. Het 'waarom' is dus duidelijk.

Het 'hoe' is iets meer onbekend. Voor mensen die gewend zijn aan SQL-functies, zullen de bovenstaande databasescripts er vreemd uitzien. Maar let op hoe ze allemaal in JavaScript staan en hoe ze dezelfde API gebruiken die we in Meteor gebruiken, zowel op de server als op de client. We hebben een consistente API via onze database, server en client.

Voer de schema-migratieopdrachten uit vanuit de meteor mongo-shell:

# run meteor
meteor

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

Versieveld toevoegen aan alle records in een verzameling

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

Array uit alle records in een verzameling verwijderen

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);
    }
});

Naam van collectie wijzigen

db.originalName.renameCollection("newName" );

Zoek een veld met een specifieke string

Met de kracht van regex komt grote verantwoordelijkheid ....

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

Maak een nieuw veld van oud

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

Trek objecten uit een array en plaats deze in een nieuw veld

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);
    }
});

Klodderplaat van de ene verzameling in de andere verzameling (d.w.z. Verwijderen Join & Flatten)

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);
    }
});

Zorg ervoor dat het veld bestaat

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

Zorg ervoor dat het veld een specifieke waarde heeft

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

Verwijder record als Specifiek veld Specifieke waarde is

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

Wijzig de specifieke waarde van het veld in nieuwe waarde

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

Specifiek veld uitschakelen op nul

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);
    }
});

Converteer ObjectId naar String

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

Veldwaarden converteren van getallen naar tekenreeksen

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

Veldwaarden converteren van tekenreeksen naar getallen

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}});
     }
});

Maak een tijdstempel van een ObjectID in het veld _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);
    }
});

Maak een ObjectID van een datumobject

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));

Zoek alle records met items in een array

Wat we hier doen, is verwijzen naar de array-index met puntnotatie

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow