sql >> Database >  >> NoSQL >> MongoDB

Een MongoDB-weergave converteren naar een verzameling

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

  1. Waarden zoeken met behulp van een gedeeltelijke sleutelnaam in een Redis-gesorteerde set

  2. waarom is het zo traag met 100.000 records bij het gebruik van pijplijn in redis?

  3. Stappen om MongoDB op Amazon Linux te installeren

  4. MongoDB $max Aggregation Pipeline Operator