Buscar..
Observaciones
A menudo es necesario ejecutar scripts de mantenimiento en su base de datos. Los campos se renombran; las estructuras de datos se cambian; se eliminan las características que utilizaste para admitir; Los servicios son migrados. La lista de razones por las que puede querer cambiar su esquema es bastante ilimitada. Entonces, el 'por qué' es bastante autoexplicativo.
El 'cómo' es un poco más desconocido. Para aquellas personas acostumbradas a las funciones de SQL, los scripts de la base de datos anteriores se verán extraños. Pero observe cómo todos están en javascript y cómo están usando la misma API que usamos en todo Meteor, tanto en el servidor como en el cliente. Tenemos una API consistente a través de nuestra base de datos, servidor y cliente.
Ejecute los comandos de migración de esquema desde el shell de meteor mongo:
# run meteor
meteor
# access the database shell in a second terminal window
meteor mongo
Agregar campo de versión a todos los registros en una colección
db.posts.find().forEach(function(doc){
db.posts.update({_id: doc._id}, {$set:{'version':'v1.0'}}, false, true);
});
Eliminar matriz de todos los registros en una colección
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);
}
});
Renombrar colección
db.originalName.renameCollection("newName" );
Buscar campo que contiene una cadena específica
Con el poder de las expresiones regulares viene una gran responsabilidad ...
db.posts.find({'text': /.*foo.*|.*bar.*/i})
Crear nuevo campo desde viejo
db.posts.find().forEach(function(doc){
if(doc.oldField){
db.posts.update({_id: doc._id}, {$set:{'newField':doc.oldField}}, false, true);
}
});
Extraiga objetos de una matriz y colóquelos en un campo nuevo
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);
}
});
Registro de blob de una colección a otra colección (es decir, Eliminar unir y aplanar)
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);
}
});
Asegúrese de que exista el campo
db.posts.find().forEach(function(doc){
if(!doc.foo){
db.posts.update({_id: doc._id}, {$set:{'foo':''}}, false, true);
}
});
Asegúrese de que el campo tiene un valor específico
db.posts.find().forEach(function(doc){
if(!doc.foo){
db.posts.update({_id: doc._id}, {$set:{'foo':'bar'}}, false, true);
}
});
Eliminar registro si el campo específico es un valor específico
db.posts.find().forEach(function(doc){
if(doc.foo === 'bar'){
db.posts.remove({_id: doc._id});
}
});
Cambiar el valor específico del campo a un nuevo valor
db.posts.find().forEach(function(doc){
if(doc.foo === 'bar'){
db.posts.update({_id: doc._id}, {$set:{'foo':'squee'}}, false, true);
}
});
Anular campo específico a nulo
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 a cadena
db.posts.find().forEach(function(doc){
db.accounts.update({_id: doc._id}, {$set: {'_id': doc._id.str }}, false, true);
});
Convertir valores de campo de números a cadenas
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 valores de campo de cadenas a números
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}});
}
});
Cree una marca de tiempo desde un ObjectID en el campo _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);
}
});
Crear un ObjectID a partir de un objeto 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));
Encuentra todos los registros que tienen elementos en una matriz
Lo que estamos haciendo aquí es hacer referencia al índice de matriz usando notación de puntos
db.posts.find({"tags.0": {$exists: true }})