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