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

Cómo convertir una vista de MongoDB en una colección

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