MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So konvertieren Sie eine MongoDB-Ansicht in eine Sammlung

Wenn Sie eine Ansicht in einer MongoDB-Datenbank haben, die Sie lieber als Sammlung darstellen möchten, sind Sie hier genau richtig.

Unten sehen Sie ein Beispiel für das Konvertieren einer Ansicht in eine Sammlung in MongoDB.

Beispiel

Dieses Beispiel zeigt, wie eine Ansicht mithilfe der MongoDB-Datenbanktools mongodump in eine Sammlung konvertiert wird und mongorestore .

Wenn Sie diese Tools nicht installiert haben, lesen Sie die MongoDB-Installationsanleitung.

Ansicht finden

Werfen wir zunächst einen Blick auf die Ansichten und Sammlungen in der aktuellen Datenbank:

show collections

Ergebnis:

employees
owners
pets
system.views
v_pettypes

In diesem Fall v_pettypes ist eigentlich eine Ansicht.

Wir können mit der folgenden Abfrage überprüfen, ob es sich um eine Ansicht handelt:

db.getCollectionInfos( { "name": "v_pettypes"} )

Ergebnis:

[
	{
		"name" : "v_pettypes",
		"type" : "view",
		"options" : {
			"viewOn" : "pets",
			"pipeline" : [
				{
					"$group" : {
						"_id" : "$type"
					}
				}
			]
		},
		"info" : {
			"readOnly" : true
		}
	}
]

Wir wissen, dass es sich um eine Ansicht handelt, weil der type Feld hat den Wert view .

Konvertieren Sie die Ansicht in eine Sammlung

Wir können jetzt fortfahren und diese Ansicht in eine Sammlung umwandeln. Wir können dies mit den MongoDB-Datenbanktools mongodump tun und mongorestore .

Wir verwenden mongodump um die Ansicht zu exportieren, und mongorestore um es wiederherzustellen. Insbesondere leiten wir den mongodump weiter Ausgabestrom in mongorestore . Auf diese Weise können wir alles auf einmal erledigen.

Hier ist der Code:

mongodump --archive --db=PetHotel --collection=v_pettypes --viewsAsCollections | mongorestore --archive  --nsFrom='PetHotel.v_pettypes' --nsTo='PetHotel.pettypes'

Sie müssen diesen Code über die Befehlszeile Ihres Systems ausführen (z. B. ein neues Terminal- oder Eingabeaufforderungsfenster). Führen Sie es nicht vom mongo aus Hülse.

Das Ausführen dieses Codes konvertierte die v_pettypes Blick auf eine Sammlung namens pettypes in derselben Datenbank.

Genau genommen haben wir nicht wirklich konvertiert der Blick auf eine Sammlung. Wir haben einfach die --viewsAsCollections verwendet Argument, um die Ansicht als Sammlung auszugeben, dann haben wir diese Sammlung wieder in der Datenbank wiederhergestellt. Daher existiert noch die ursprüngliche Ansicht.

Wenn Sie eine Ansicht als Sammlung exportieren, wird mongodump erzeugt eine BSON-Datei, die die Dokumente in der Ansicht enthält. Wenn Sie mongorestore verwenden Um die erstellte BSON-Datei wiederherzustellen, wird die Ansicht als Sammlung wiederhergestellt.

Ohne Verwendung von --viewsAsCollections Argument, mongodump exportiert die Metadaten jeder Ansicht. Wenn Sie die Metadatendatei einer Ansicht in einen mongorestore einschließen Vorgang wird die Ansicht neu erstellt.

Verwenden von --viewsAsCollections lässt auch alle Standardsammlungen weg.

Überprüfen Sie die Ergebnisse

Werfen wir einen weiteren Blick auf unsere Ansichten und Sammlungen.

show collections

Ergebnis:

employees
owners
pets
pettypes
system.views
v_pettypes

Wir können also sehen, dass eine neue Sammlung namens pettypes existiert, und die ursprüngliche Ansicht existiert noch.

Wir können diese pettypes verifizieren ist eine Sammlung (und keine Ansicht) wie folgt:

db.getCollectionInfos( { "name": "pettypes"} )

Ergebnis:

[
	{
		"name" : "pettypes",
		"type" : "collection",
		"options" : {
			
		},
		"info" : {
			"readOnly" : false,
			"uuid" : UUID("d183c7e4-44bc-4656-b272-7ad707f8dc62")
		},
		"idIndex" : {
			"v" : 2,
			"key" : {
				"_id" : 1
			},
			"name" : "_id_"
		}
	}
]

Wir können sehen, dass der type Feld enthält einen Wert von collection , was bedeutet, dass es sich um eine Sammlung handelt.

Ursprüngliche Ansicht löschen

An dieser Stelle haben wir nun die Wahl, die Originalansicht entweder zu löschen oder dort zu belassen.

Wir können es so löschen:

db.v_pettypes.drop()

Wenn wir jetzt die Sammlungen überprüfen, können wir sehen, dass die ursprüngliche Ansicht verschwunden ist und die neue Sammlung erhalten bleibt.

show collections

Ergebnis:

employees
owners
pets
pettypes
system.views