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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow