MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como converter uma visualização do MongoDB em uma coleção


Se você tem uma visualização em um banco de dados MongoDB que prefere que seja uma coleção, está no lugar certo.

Abaixo está um exemplo de conversão de uma visualização em uma coleção no MongoDB.

Exemplo


Este exemplo demonstra como converter uma visualização em uma coleção usando as ferramentas de banco de dados MongoDB mongodump e mongorestore .

Se você não tiver essas ferramentas instaladas, consulte o guia de instalação do MongoDB.

Encontre uma visualização


Primeiro, vamos dar uma olhada nas visualizações e coleções no banco de dados atual:
show collections

Resultado:
employees
owners
pets
system.views
v_pettypes

Nesse caso, v_pettypes é na verdade uma visão.

Podemos verificar que é uma visualização com a seguinte consulta:
db.getCollectionInfos( { "name": "v_pettypes"} )

Resultado:
[
	{
		"name" : "v_pettypes",
		"type" : "view",
		"options" : {
			"viewOn" : "pets",
			"pipeline" : [
				{
					"$group" : {
						"_id" : "$type"
					}
				}
			]
		},
		"info" : {
			"readOnly" : true
		}
	}
]

Sabemos que é uma visualização porque o type campo tem um valor de view .

Converter a visualização em uma coleção


Agora podemos ir em frente e converter essa visualização em uma coleção. Podemos fazer isso com as ferramentas de banco de dados MongoDB mongodump e mongorestore .

Usaremos mongodump para exportar a visualização e mongorestore para restaurá-lo. Especificamente, canalizaremos o mongodump fluxo de saída em mongorestore . Assim podemos fazer tudo de uma vez.

Aqui está o código:
mongodump --archive --db=PetHotel --collection=v_pettypes --viewsAsCollections | mongorestore --archive  --nsFrom='PetHotel.v_pettypes' --nsTo='PetHotel.pettypes'

Você precisa executar esse código na linha de comando do seu sistema (por exemplo, um novo Terminal ou janela de prompt de comando). Não execute a partir do mongo Concha.

A execução desse código converteu os v_pettypes visualizar uma coleção chamada pettypes no mesmo banco de dados.

A rigor, não convertemos a vista para uma coleção. Nós simplesmente usamos o --viewsAsCollections argumento para despejar a exibição como uma coleção, restauramos essa coleção de volta ao banco de dados. Portanto, a visão original ainda existe.

Quando você exporta uma visualização como uma coleção, mongodump produz um arquivo BSON contendo os documentos na visualização. Se você usa mongorestore para restaurar o arquivo BSON produzido, a visualização será restaurada como uma coleção.

Sem usar o --viewsAsCollections argumento, mongodump exporta os metadados de cada visualização. Se você incluir o arquivo de metadados de uma visualização em um mongorestore operação, a visualização é recriada.

Usando --viewsAsCollections também omite todas as coleções padrão.

Verifique os resultados


Vamos dar outra olhada em nossas visualizações e coleções.
show collections

Resultado:
employees
owners
pets
pettypes
system.views
v_pettypes

Assim, podemos ver que uma nova coleção chamada pettypes existe, e a visão original ainda existe.

Podemos verificar se pettypes é uma coleção (e não uma exibição) da seguinte forma:
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 o type campo contém um valor de collection , o que significa que é uma coleção.

Solte a visualização original


Neste estágio, agora temos a opção de excluir a visualização original ou deixá-la lá.

Podemos soltá-lo assim:
db.v_pettypes.drop()

Agora, se verificarmos as coleções, podemos ver que a visualização original desapareceu e a nova coleção permanece.
show collections

Resultado:
employees
owners
pets
pettypes
system.views