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