sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB cambia el nombre del campo de la base de datos dentro de la matriz

Por lo que vale, aunque suene horrible tener que hacerlo, la solución es bastante fácil. Esto, por supuesto, depende de cuántos registros tenga. Pero aquí está mi ejemplo:

db.Setting.find({ 'Value.Tiers.0.AssetsUnderManagement': { $exists: 1 } }).snapshot().forEach(function(item)
{    
    for(i = 0; i != item.Value.Tiers.length; ++i)
    {
        item.Value.Tiers[i].Aum = item.Value.Tiers[i].AssetsUnderManagement;
        delete item.Value.Tiers[i].AssetsUnderManagement;
    }
    
    db.Setting.update({_id: item._id}, item);
});

Itero sobre mi colección donde se encuentra la matriz y se encuentra el nombre "incorrecto". Luego itero sobre la subcolección, establezco el nuevo valor, elimino el anterior y actualizo todo el documento. Fue relativamente indoloro. De acuerdo, solo tengo unas pocas decenas de miles de filas para buscar, de las cuales solo unas pocas docenas cumplen con los criterios.

Aún así, ¡espero que esta respuesta ayude a alguien!

Editar:Se agregó snapshot() a la consulta Vea por qué en los comentarios.

Debes aplicar snapshot() al cursor antes de recuperar cualquier documento de la base de datos. Solo puede usar snapshot() con colecciones no fragmentadas.

Desde MongoDB 3.4, snapshot() Se eliminó la función. Entonces, si usa Mongo 3.4+, el ejemplo anterior debería eliminar snapshot() función.