Recherche…
Remarques
Il est souvent nécessaire d'exécuter des scripts de maintenance sur votre base de données. Les champs sont renommés; les structures de données sont modifiées; les fonctionnalités que vous avez utilisées pour prendre en charge sont supprimées; les services sont migrés. La liste des raisons pour lesquelles vous pourriez vouloir changer votre schéma est sans limites. Donc, le «pourquoi» est assez explicite.
Le «comment» est un peu moins familier. Pour les personnes habituées aux fonctions SQL, les scripts de base de données ci-dessus seront étranges. Mais remarquez comment ils sont tous en JavaScript, et comment ils utilisent la même API que nous utilisons dans Meteor, à la fois sur le serveur et sur le client. Nous avons une API cohérente via notre base de données, notre serveur et notre client.
Exécutez les commandes de migration du schéma à partir du shell mongo meteor:
# run meteor
meteor
# access the database shell in a second terminal window
meteor mongo
Ajouter un champ de version à tous les enregistrements d'une collection
db.posts.find().forEach(function(doc){
db.posts.update({_id: doc._id}, {$set:{'version':'v1.0'}}, false, true);
});
Supprimer un tableau de tous les enregistrements d'une collection
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);
}
});
Renommer la collection
db.originalName.renameCollection("newName" );
Rechercher un champ contenant une chaîne spécifique
Avec le pouvoir des regex, il y a une grande responsabilité ....
db.posts.find({'text': /.*foo.*|.*bar.*/i})
Créer un nouveau champ à partir de l'ancien
db.posts.find().forEach(function(doc){
if(doc.oldField){
db.posts.update({_id: doc._id}, {$set:{'newField':doc.oldField}}, false, true);
}
});
Sortez les objets d'un tableau et placez-les dans un nouveau champ
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);
}
});
Blob Record d'une collection à une autre collection (par exemple, supprimer 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);
}
});
Assurez-vous que le champ existe
db.posts.find().forEach(function(doc){
if(!doc.foo){
db.posts.update({_id: doc._id}, {$set:{'foo':''}}, false, true);
}
});
Assurez-vous que le champ a une valeur spécifique
db.posts.find().forEach(function(doc){
if(!doc.foo){
db.posts.update({_id: doc._id}, {$set:{'foo':'bar'}}, false, true);
}
});
Supprimer un enregistrement si un champ spécifique est une valeur spécifique
db.posts.find().forEach(function(doc){
if(doc.foo === 'bar'){
db.posts.remove({_id: doc._id});
}
});
Changer la valeur spécifique du champ en nouvelle valeur
db.posts.find().forEach(function(doc){
if(doc.foo === 'bar'){
db.posts.update({_id: doc._id}, {$set:{'foo':'squee'}}, false, true);
}
});
Champ spécifique non défini sur Null
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);
}
});
Convertir ObjectId en chaîne
db.posts.find().forEach(function(doc){
db.accounts.update({_id: doc._id}, {$set: {'_id': doc._id.str }}, false, true);
});
Convertir les valeurs de champ des nombres en chaînes
var newvalue = "";
db.posts.find().forEach(function(doc){
if(doc.foo){
newvalue = '"' + doc.foo + '"';
db.accounts.update({_id: doc._id}, {$set: {'doc.foo': newvalue}});
}
});
Convertir les valeurs de champs de chaînes en nombres
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}});
}
});
Créer un horodatage à partir d'un ObjectID dans le champ _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);
}
});
Créer un ObjectID à partir d'un objet de date
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));
Rechercher tous les enregistrements contenant des éléments dans un tableau
Ce que nous faisons ici fait référence à l'index du tableau en utilisant la notation par points
db.posts.find({"tags.0": {$exists: true }})