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