Om du har en vy i en MongoDB-databas som du föredrar att vara en samling, är du på rätt plats.
Nedan är ett exempel på att konvertera en vy till en samling i MongoDB.
Exempel
Det här exemplet visar hur man konverterar en vy till en samling med hjälp av MongoDB Database Tools mongodump
och mongorestore
.
Om du inte har dessa verktyg installerade, se MongoDB installationsguide.
Hitta en vy
Låt oss först ta en titt på vyerna och samlingarna i den aktuella databasen:
show collections
Resultat:
employees owners pets system.views v_pettypes
I det här fallet, v_pettypes
är faktiskt en vy.
Vi kan verifiera att det är en vy med följande fråga:
db.getCollectionInfos( { "name": "v_pettypes"} )
Resultat:
[ { "name" : "v_pettypes", "type" : "view", "options" : { "viewOn" : "pets", "pipeline" : [ { "$group" : { "_id" : "$type" } } ] }, "info" : { "readOnly" : true } } ]
Vi vet att det är en vy eftersom type
fältet har värdet view
.
Konvertera vyn till en samling
Vi kan nu gå vidare och konvertera den vyn till en samling. Vi kan göra detta med MongoDB Database Tools mongodump
och mongorestore
.
Vi använder mongodump
för att exportera vyn och mongorestore
för att återställa den. Närmare bestämt skickar vi mongodump
utdataström till mongorestore
. På så sätt kan vi göra det hela på en gång.
Här är koden:
mongodump --archive --db=PetHotel --collection=v_pettypes --viewsAsCollections | mongorestore --archive --nsFrom='PetHotel.v_pettypes' --nsTo='PetHotel.pettypes'
Du måste köra den koden från ditt systems kommandorad (t.ex. ett nytt terminal- eller kommandotolksfönster). Kör det inte från mongo
skal.
Genom att köra den koden konverterades v_pettypes
visa till en samling som heter pettypes
i samma databas.
Strängt taget konverterade vi faktiskt inte utsikten till en samling. Vi använde helt enkelt --viewsAsCollections
argument för att dumpa vyn som en samling, sedan återställde vi den samlingen tillbaka till databasen. Därför existerar originalvy fortfarande.
När du exporterar en vy som en samling, mongodump
producerar en BSON-fil som innehåller dokumenten i vyn. Om du använder mongorestore
för att återställa den producerade BSON-filen kommer vyn att återställas som en samling.
Utan att använda --viewsAsCollections
argument, mongodump
exporterar varje vys metadata. Om du inkluderar en vys metadatafil i en mongorestore
operation återskapas vyn.
Använder --viewsAsCollections
utelämnar också alla standardkollektioner.
Kontrollera resultaten
Låt oss ta en ny titt på våra synpunkter och samlingar.
show collections
Resultat:
employees owners pets pettypes system.views v_pettypes
Så vi kan se att en ny samling som heter pettypes
existerar, och den ursprungliga vyn finns fortfarande.
Vi kan verifiera att pettypes
är en samling (och inte en vy) enligt följande:
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 att type
fältet innehåller värdet collection
, vilket betyder att det är en samling.
Släpp originalvyn
I detta skede har vi nu valet att antingen ta bort den ursprungliga vyn eller lämna den där.
Vi kan släppa det så här:
db.v_pettypes.drop()
Om vi nu kontrollerar samlingarna kan vi se att den ursprungliga vyn är borta och den nya samlingen finns kvar.
show collections
Resultat:
employees owners pets pettypes system.views