sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan konverteres en MongoDB-visning til en samling

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

  1. MongoDB-objekt serialiseret som JSON

  2. Atomicitet, isolation og samtidighed i MongoDB

  3. Problem med MongoDB GridFS ved at gemme filer med Node.JS

  4. Mongodump fra fjernserver