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