Als u een weergave in een MongoDB-database heeft die u liever een verzameling zou willen zijn, bent u hier aan het juiste adres.
Hieronder ziet u een voorbeeld van het converteren van een weergave naar een verzameling in MongoDB.
Voorbeeld
Dit voorbeeld laat zien hoe u een weergave omzet in een verzameling met behulp van de MongoDB Database Tools mongodump
en mongorestore
.
Als je deze tools niet hebt geïnstalleerd, raadpleeg dan de MongoDB-installatiehandleiding.
Vind een weergave
Laten we eerst eens kijken naar de weergaven en collecties in de huidige database:
show collections
Resultaat:
employees owners pets system.views v_pettypes
In dit geval v_pettypes
is eigenlijk een uitzicht.
We kunnen verifiëren dat het een weergave is met de volgende vraag:
db.getCollectionInfos( { "name": "v_pettypes"} )
Resultaat:
[ { "name" : "v_pettypes", "type" : "view", "options" : { "viewOn" : "pets", "pipeline" : [ { "$group" : { "_id" : "$type" } } ] }, "info" : { "readOnly" : true } } ]
We weten dat het een weergave is omdat het type
veld heeft een waarde van view
.
Converteer de weergave naar een verzameling
We kunnen nu doorgaan en die weergave omzetten in een verzameling. We kunnen dit doen met de MongoDB Database Tools mongodump
en mongorestore
.
We gebruiken mongodump
om de weergave te exporteren, en mongorestore
om het te herstellen. In het bijzonder zullen we de mongodump
output stream naar mongorestore
. Op die manier kunnen we alles tegelijk doen.
Hier is de code:
mongodump --archive --db=PetHotel --collection=v_pettypes --viewsAsCollections | mongorestore --archive --nsFrom='PetHotel.v_pettypes' --nsTo='PetHotel.pettypes'
U moet die code uitvoeren vanaf de opdrachtregel van uw systeem (bijvoorbeeld een nieuw Terminal- of opdrachtpromptvenster). Voer het niet uit vanaf de mongo
schelp.
Het uitvoeren van die code converteerde de v_pettypes
weergave naar een verzameling genaamd pettypes
in dezelfde databank.
Strikt genomen hebben we niet echt geconverteerd het uitzicht op een collectie. We gebruikten gewoon de --viewsAsCollections
argument om de weergave als een verzameling te dumpen, daarna hebben we die verzameling teruggezet in de database. Daarom bestaat de oorspronkelijke opvatting nog steeds.
Wanneer u een weergave als verzameling exporteert, mongodump
produceert een BSON-bestand met de documenten in de weergave. Als u mongorestore
. gebruikt om het geproduceerde BSON-bestand te herstellen, wordt de weergave hersteld als een verzameling.
Zonder gebruik te maken van de --viewsAsCollections
argument, mongodump
exporteert de metadata van elke weergave. Als u het metadatabestand van een weergave opneemt in een mongorestore
bewerking, wordt de weergave opnieuw gemaakt.
--viewsAsCollections
gebruiken laat ook alle standaardcollecties weg.
Controleer de resultaten
Laten we nog eens kijken naar onze meningen en collecties.
show collections
Resultaat:
employees owners pets pettypes system.views v_pettypes
Dus we kunnen zien dat een nieuwe collectie genaamd pettypes
bestaat en de oorspronkelijke weergave bestaat nog steeds.
We kunnen verifiëren dat pettypes
is een verzameling (en geen weergave) als volgt:
db.getCollectionInfos( { "name": "pettypes"} )
Resultaat:
[ { "name" : "pettypes", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("d183c7e4-44bc-4656-b272-7ad707f8dc62") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } } ]
We kunnen zien dat het type
veld bevat een waarde van collection
, wat betekent dat het een verzameling is.
Laat de originele weergave vallen
In dit stadium hebben we nu de keuze om de oorspronkelijke weergave te verwijderen of daar te laten.
We kunnen het als volgt neerzetten:
db.v_pettypes.drop()
Als we nu de collecties controleren, kunnen we zien dat de oorspronkelijke weergave is verdwenen en de nieuwe collectie blijft bestaan.
show collections
Resultaat:
employees owners pets pettypes system.views