sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man konverterar en MongoDB-vy till en samling

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

  1. mongo-kommandot känns inte igen när man försöker ansluta till en mongodb-server

  2. Hur man förfinar exporterade MongoDB-dokument i mongoexport

  3. Använder .sort med PyMongo

  4. node.js mongodb välj dokument med _id node-mongodb-native