Módulo: Mongoid::Tareas::Base de datos
Overview
Módulo de utilidad para administrar colecciones de bases de datos, índices, fragmentación, etc. Se invoca desde tareas de Rake.
Colapso del resumen del método de instancia
-
#crear_colecciones(modelos =::Mongoid.models, fuerza: falso) ⇒ Objeto
Crea colecciones para cada modelo dados los globs proporcionados y la clase no está incorporada.
-
# crear_índices(modelos =::Mongoid.models) ⇒Array<Class>
Crea índices para cada modelo dados los globs proporcionados y la clase no está incorporada.
-
#create_search_indexes(modelos =::Mongoid.models, esperar: verdadero) ⇒ Objeto
Enviar solicitudes para que se creen los índices de búsqueda.
-
#eliminar_índices(modelos =::Mongoid.models) ⇒ Array<Class>
Elimine los índices de cada modelo dados los globs proporcionados y la clase no está incorporada.
-
#eliminar_índices_de_búsqueda(modelos =::Mongoid.models) ⇒ Objeto
Eliminar todos los índices de búsqueda de los modelos dados.
-
#eliminar_índices_indefinidos(modelos =::Mongoid.models) ⇒ Hash{Clase => Matriz(Hash)}
Remueve los índices que existen en la base de datos pero que no están especificados en los modelos.
-
#colecciones_de_fragmentos(modelos =::Mongoid.models) ⇒ Matriz<Class>
Colecciones de fragmentos para modelos que declaran claves de fragmentos.
-
#índices_indefinidos(modelos =::Mongoid.models) ⇒ Array<Hash>
Devuelve la lista de índices por modelo que existen en la base de datos pero no están especificados en los modelos.
Detalles del método de instancia
# crear_colecciones(modelos =::Mongoid.models, fuerza: falso)⇒ Objeto
Crea colecciones para cada modelo dados los globs proporcionados y la clase no está incorporada.
21 22 23 24 25 26 27 28 29 30 31 32 33 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 21 def crear_colecciones(modelos = ::Mongoid.modelos, fuerza: false) modelos.cada hacer |modelo| Si !modelo. || modelo.¿cíclico? modelo.create_collection(fuerza: fuerza) logger.información("MONGOID:Colección creada para #{model}: ") else logger.información("MONGOID:opciones de colección ignoradas en: #{model}, defínalas en el modelo raíz.") end rescate Excepción logger.Error "Erroral crear la colección para #{model}" propagar end end |
# crear_índices(modelos =::Mongoid.models)⇒ Array<Class>
Crea índices para cada modelo dados los globs proporcionados y la clase no está incorporada.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 42 def create_indexes(modelos = ::Mongoid.modelos) modelos.cada hacer |modelo| siguiente Si modelo.especificaciones del índice.¿vacío? Si !modelo. || modelo.¿cíclico? modelo.create_indexes logger.información("MONGOID:Índices creados en #{model}: ") modelo.especificaciones del índice.cada hacer |especulación| logger.información("MONGOID:Índice: #{clave específica }, Opciones: #{opciones }") end modelo else logger.información("MONGOID:Índice ignorado en: #{model}, defínalo en el modelo raíz.") nulo end end.compact end |
#create_search_indexes(modelos =::Mongoid.models, esperar: verdadero) ⇒ Objeto
Envíe solicitudes para la creación de los índices de búsqueda. Esto se realizará de forma asíncrona. Si "wait" es verdadero, el método se bloqueará mientras espera la creación de los índices.
67 68 69 70 71 72 73 74 75 76 77 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 67 def create_search_indexes(modelos = ::Mongoid.modelos, esperar: true) buscable = modelos.Seleccione { |m| m.especificaciones del índice de búsqueda.any? } # poner en cola las solicitudes de creación de índice de búsqueda nombres de índice por modelo = buscable.cada_con_objeto({}) hacer |modelo, obj| logger.información("MONGOID: Creando índices de búsqueda en #{model }...") obj[modelo] = modelo.create_search_indexes end esperar_a_los_índices_de_búsqueda(nombres de índice por modelo) Si esperar end |
#eliminar_índices(modelos =::Mongoid.models) ⇒ Array<Class>
Elimine los índices de cada modelo dados los globs proporcionados y la clase no está incorporada.
139 140 141 142 143 144 145 146 147 148 149 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 139 def remove_indexes(modelos = ::Mongoid.modelos) modelos.cada hacer |modelo| siguiente Si modelo. begin modelo.remove_indexes rescate Mongo::Error::Operación fallida siguiente end modelo end.compact end |
#eliminar_índices_de_búsqueda(modelos =::Mongoid.models) ⇒ Objeto
Eliminar todos los índices de búsqueda de los modelos dados.
155 156 157 158 159 160 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 155 def eliminar_índices_de_búsqueda(modelos = ::Mongoid.modelos) modelos.cada hacer |modelo| siguiente Si modelo. modelo.eliminar_índices_de_búsqueda end end |
#eliminar_índices_indefinidos(modelos =::Mongoid.models) ⇒ Hash{Clase => Matriz(Hash)}
Remueve los índices que existen en la base de datos pero que no están especificados en los modelos.
118 119 120 121 122 123 124 125 126 127 128 129 130 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 118 def eliminar_índices_indefinidos(modelos = ::Mongoid.modelos) índices indefinidos(modelos).cada hacer |modelo, indexes| indexes.cada hacer |index| clave = index['key'].simbolizar_claves Colección = modelo.Colección Colección.indexes(sesión: modelo.Enviar(:_sesión)).soltar uno(clave) logger.información( "MONGOID: Se eliminó el índice '#{índice['nombre']}' en la colección " + " ' #{colección.nombre} ' en la base de datos' #{colección.base de datos.nombre} '." ) end end end |
#colecciones_de_fragmentos(modelos =::Mongoid.models) ⇒ Matriz<Class>
Colecciones de fragmentos para modelos que declaran claves de fragmentos.
Devuelve las clases de modelo cuyas colecciones fueron fragmentadas, incluidas las clases de modelo cuyas colecciones ya habían sido fragmentadas antes de la invocación de este método.
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 172 def colecciones de fragmentos(modelos = ::Mongoid.modelos) modelos.map hacer |modelo| siguiente Si modelo.shard_config.nil? Si modelo. && !modelo.¿cíclico? logger.advertir("MONGOID:#{model} tiene configuración de fragmento pero estáincrustado") siguiente end a no ser que modelo.Colección.clúster.¿fragmentado? logger.advertir("MONGOID:#{model} tiene configuración de fragmento pero no se conserva en un clúster fragmentado: #{model.collection.cluster.summary}") siguiente end # La base de datos de la colección debe existir para poder ejecutar collStats. # Dependiendo de la versión del servidor, la propia colección también debe # existir. # MongoDB no tiene un comando para crear la base de datos; lo mejor #Una aproximación de esto es crear la colección que queremos. # En servidores más antiguos, crear una colección que ya existe es # un error. # Además, los servidores 3.6 y potencialmente más antiguos no proporcionan # el código de error cuando se les pide que collStats no exista # colección (https://jira.mongodb.org/browse/SERVER-50070). begin stats = modelo.Colección.database.Comando(collStats: modelo.Colección.Nombre).primera rescate Mongo::Error::Operación fallida => Excª # El código 26 es que la base de datos no existe. # El código 8 es una colección que no existe a partir de 4.0. # En 3.6 y anteriores, coincide con el texto del mensaje de excepción. Si Excª.Código == 26 || Excª.Código == 8 || Excª.Código.nil? && Excª. =~ /extraviado/ entonces modelo.Colección.Cree stats = modelo.Colección.database.Comando(collStats: modelo.Colección.Nombre).primera else propagar end end stats = modelo.Colección.database.Comando(collStats: modelo.Colección.Nombre).primera Si stats[:fragmentado] logger.información("MONGOID:#{model.collection.namespace} ya está fragmentado para #{model }") siguiente modelo end base de datos de administración = modelo.Colección.Cliente.uso(:administración).database begin base de datos de administración.Comando(habilitar fragmentación: modelo.Colección.database.Nombre) rescate Mongo::Error::Operación fallida => Excª # El servidor 2.6 falla si el particionado ya está habilitado Si Excª.Código == 23 || Excª.Código.nil? && Excª. =~ /ya habilitado/ # Nada else propagar end end begin base de datos de administración.Comando(Colección de fragmentos: modelo.Colección.namespace, **modelo.shard_config) rescate Mongo::Error::Operación fallida => e logger.Error("MONGOID:No se pudo fragmentar la colección #{model.collection.namespace} para #{model}: #{e.class}: #{e }") siguiente end logger.información("MONGOID: colección particionada #{model.colección.namespace} para #{model}") modelo end.compact end |
#undefined_indexes(models = ::Mongoid.models) ⇒ Arreglo<Hash>
Devuelve la lista de índices por modelo que existen en la base de datos pero no están especificados en los modelos.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# Archivo 'lib/mongoid/tasks/database.rb', línea 86 def índices indefinidos(modelos = ::Mongoid.modelos) indefinido_por_modelo = {} modelos.cada hacer |modelo| a no ser que modelo. begin modelo.Colección.indexes(sesión: modelo.Enviar(:_sesión)).cada hacer |index| # ignore default index a no ser que index['nombre '] == '_id_' clave = index['key'].simbolizar_claves especulación = modelo.especificación_del_índice(clave, index['nombre ']) a no ser que especulación # índice no especificado indefinido_por_modelo[modelo] ||= [] indefinido_por_modelo[modelo] << index end end end rescate Mongo::Error::Operación fallida; end end end indefinido_por_modelo end |