Si tiene una vista en una base de datos MongoDB que preferiría que fuera una colección, está en el lugar correcto.
A continuación se muestra un ejemplo de cómo convertir una vista en una colección en MongoDB.
Ejemplo
Este ejemplo demuestra cómo convertir una vista en una colección utilizando las herramientas de base de datos de MongoDB mongodump
y mongorestore
.
Si no tiene estas herramientas instaladas, consulte la guía de instalación de MongoDB.
Buscar una vista
Primero, echemos un vistazo a las vistas y colecciones en la base de datos actual:
show collections
Resultado:
employees owners pets system.views v_pettypes
En este caso, v_pettypes
es en realidad una vista.
Podemos verificar que es una vista con la siguiente consulta:
db.getCollectionInfos( { "name": "v_pettypes"} )
Resultado:
[ { "name" : "v_pettypes", "type" : "view", "options" : { "viewOn" : "pets", "pipeline" : [ { "$group" : { "_id" : "$type" } } ] }, "info" : { "readOnly" : true } } ]
Sabemos que es una vista porque el type
el campo tiene un valor de view
.
Convertir la vista en una colección
Ahora podemos continuar y convertir esa vista en una colección. Podemos hacer esto con MongoDB Database Tools mongodump
y mongorestore
.
Usaremos mongodump
para exportar la vista y mongorestore
para restaurarlo. Específicamente, canalizaremos el mongodump
flujo de salida en mongorestore
. De esa manera podemos hacer todo a la vez.
Aquí está el código:
mongodump --archive --db=PetHotel --collection=v_pettypes --viewsAsCollections | mongorestore --archive --nsFrom='PetHotel.v_pettypes' --nsTo='PetHotel.pettypes'
Debe ejecutar ese código desde la línea de comandos de su sistema (por ejemplo, una nueva ventana de Terminal o Símbolo del sistema). No lo ejecutes desde mongo
cáscara.
Ejecutar ese código convirtió los v_pettypes
ver una colección llamada pettypes
en la misma base de datos.
Estrictamente hablando, en realidad no convertimos la vista a una colección. Simplemente usamos --viewsAsCollections
argumento para volcar la vista como una colección, luego restauramos esa colección a la base de datos. Por lo tanto, la vista original todavía existe.
Cuando exporta una vista como una colección, mongodump
produce un archivo BSON que contiene los documentos en la vista. Si usa mongorestore
para restaurar el archivo BSON producido, la vista se restaurará como una colección.
Sin usar --viewsAsCollections
argumento, mongodump
exporta los metadatos de cada vista. Si incluye el archivo de metadatos de una vista en un mongorestore
operación, se vuelve a crear la vista.
Usando --viewsAsCollections
también omite todas las colecciones estándar.
Comprueba los resultados
Echemos otro vistazo a nuestras vistas y colecciones.
show collections
Resultado:
employees owners pets pettypes system.views v_pettypes
Entonces podemos ver que una nueva colección llamada pettypes
existe, y la vista original aún existe.
Podemos verificar que pettypes
es una colección (y no una vista) de la siguiente manera:
db.getCollectionInfos( { "name": "pettypes"} )
Resultado:
[ { "name" : "pettypes", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("d183c7e4-44bc-4656-b272-7ad707f8dc62") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } } ]
Podemos ver que el type
el campo contiene un valor de collection
, lo que significa que es una colección.
Soltar la vista original
En esta etapa ahora tenemos la opción de eliminar la vista original o dejarla ahí.
Podemos dejarlo así:
db.v_pettypes.drop()
Ahora, si revisamos las colecciones, podemos ver que la vista original se ha ido y permanece la nueva colección.
show collections
Resultado:
employees owners pets pettypes system.views