Hvis du har en visning i en MongoDB-database, som du foretrækker at være en samling, er du på det rigtige sted.
Nedenfor er et eksempel på konvertering af en visning til en samling i MongoDB.
Eksempel
Dette eksempel viser, hvordan man konverterer en visning til en samling ved hjælp af MongoDB Database Tools mongodump
og mongorestore
.
Hvis du ikke har disse værktøjer installeret, se MongoDB installationsvejledningen.
Find en visning
Lad os først tage et kig på visningerne og samlingerne i den aktuelle database:
show collections
Resultat:
employees owners pets system.views v_pettypes
I dette tilfælde v_pettypes
er faktisk en udsigt.
Vi kan bekræfte, at det er en visning med følgende forespørgsel:
db.getCollectionInfos( { "name": "v_pettypes"} )
Resultat:
[ { "name" : "v_pettypes", "type" : "view", "options" : { "viewOn" : "pets", "pipeline" : [ { "$group" : { "_id" : "$type" } } ] }, "info" : { "readOnly" : true } } ]
Vi ved, at det er en visning, fordi type
felt har værdien view
.
Konverter visningen til en samling
Vi kan nu gå videre og konvertere denne visning til en samling. Vi kan gøre dette med MongoDB Database Tools mongodump
og mongorestore
.
Vi bruger mongodump
for at eksportere visningen og mongorestore
at genoprette den. Specifikt sender vi mongodump
output stream til mongorestore
. På den måde kan vi klare det hele på én gang.
Her er koden:
mongodump --archive --db=PetHotel --collection=v_pettypes --viewsAsCollections | mongorestore --archive --nsFrom='PetHotel.v_pettypes' --nsTo='PetHotel.pettypes'
Du skal køre denne kode fra dit systems kommandolinje (f.eks. et nyt terminal- eller kommandopromptvindue). Kør det ikke fra mongo
skal.
Kørsel af denne kode konverterede v_pettypes
se en samling kaldet pettypes
i samme database.
Strengt taget konverterede vi faktisk ikke udsigten til en samling. Vi brugte simpelthen --viewsAsCollections
argument for at dumpe visningen som en samling, så gendannede vi samlingen tilbage til databasen. Derfor eksisterer den oprindelige opfattelse stadig.
Når du eksporterer en visning som en samling, mongodump
producerer en BSON-fil, der indeholder dokumenterne i visningen. Hvis du bruger mongorestore
for at gendanne den producerede BSON-fil, vil visningen blive gendannet som en samling.
Uden at bruge --viewsAsCollections
argument, mongodump
eksporterer hver visnings metadata. Hvis du inkluderer en visnings metadatafil i en mongorestore
operation, genskabes visningen.
Brug af --viewsAsCollections
udelader også alle standardkollektioner.
Tjek resultaterne
Lad os tage et nyt kig på vores synspunkter og samlinger.
show collections
Resultat:
employees owners pets pettypes system.views v_pettypes
Så vi kan se, at en ny samling kaldet pettypes
eksisterer, og den oprindelige visning eksisterer stadig.
Vi kan bekræfte, at pettypes
er en samling (og ikke en visning) som følger:
db.getCollectionInfos( { "name": "pettypes"} )
Resultat:
[ { "name" : "pettypes", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("d183c7e4-44bc-4656-b272-7ad707f8dc62") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } } ]
Vi kan se, at type
feltet indeholder værdien collection
, hvilket betyder, at det er en samling.
Slip den oprindelige visning
På dette stadium har vi nu valget mellem enten at slette den originale visning eller lade den blive der.
Vi kan slippe det sådan her:
db.v_pettypes.drop()
Hvis vi nu tjekker samlingerne, kan vi se, at den oprindelige visning er væk, og den nye samling forbliver.
show collections
Resultat:
employees owners pets pettypes system.views