Jeśli masz widok w bazie danych MongoDB, który wolisz być zbiorem, jesteś we właściwym miejscu.
Poniżej znajduje się przykład konwersji widoku na kolekcję w MongoDB.
Przykład
Ten przykład pokazuje, jak przekonwertować widok na kolekcję za pomocą narzędzi bazy danych MongoDB mongodump
i mongorestore
.
Jeśli nie masz zainstalowanych tych narzędzi, zapoznaj się z przewodnikiem instalacji MongoDB.
Znajdź widok
Najpierw spójrzmy na widoki i kolekcje w aktualnej bazie danych:
show collections
Wynik:
employees owners pets system.views v_pettypes
W tym przypadku v_pettypes
to właściwie widok.
Możemy zweryfikować, że jest to widok za pomocą następującego zapytania:
db.getCollectionInfos( { "name": "v_pettypes"} )
Wynik:
[ { "name" : "v_pettypes", "type" : "view", "options" : { "viewOn" : "pets", "pipeline" : [ { "$group" : { "_id" : "$type" } } ] }, "info" : { "readOnly" : true } } ]
Wiemy, że to widok, ponieważ type
pole ma wartość view
.
Konwertuj widok na kolekcję
Możemy teraz przejść dalej i przekonwertować ten widok na kolekcję. Możemy to zrobić za pomocą narzędzi bazodanowych MongoDB mongodump
i mongorestore
.
Użyjemy mongodump
aby wyeksportować widok i mongorestore
by go przywrócić. W szczególności wyślemy potok mongodump
strumień wyjściowy do mongorestore
. W ten sposób możemy zrobić wszystko na raz.
Oto kod:
mongodump --archive --db=PetHotel --collection=v_pettypes --viewsAsCollections | mongorestore --archive --nsFrom='PetHotel.v_pettypes' --nsTo='PetHotel.pettypes'
Musisz uruchomić ten kod z wiersza poleceń systemu (np. nowego okna terminala lub wiersza polecenia). Nie uruchamiaj go z mongo
powłoka.
Uruchomienie tego kodu spowodowało konwersję v_pettypes
widok na kolekcję o nazwie pettypes
w tej samej bazie danych.
Ściśle mówiąc, w rzeczywistości nie konwertowaliśmy widok na kolekcję. Po prostu użyliśmy --viewsAsCollections
argument, aby zrzucić widok jako kolekcję, a następnie przywróciliśmy tę kolekcję z powrotem do bazy danych. Dlatego pierwotny pogląd nadal istnieje.
Kiedy eksportujesz widok jako kolekcję, mongodump
tworzy plik BSON zawierający dokumenty w widoku. Jeśli używasz mongorestore
aby przywrócić utworzony plik BSON, widok zostanie przywrócony jako kolekcja.
Bez użycia --viewsAsCollections
argument, mongodump
eksportuje metadane każdego widoku. Jeśli dołączysz plik metadanych widoku w mongorestore
operacja, widok zostanie odtworzony.
Korzystanie z --viewsAsCollections
pomija również wszystkie kolekcje standardowe.
Sprawdź wyniki
Przyjrzyjmy się jeszcze raz naszym widokom i kolekcjom.
show collections
Wynik:
employees owners pets pettypes system.views v_pettypes
Widzimy więc, że nowa kolekcja o nazwie pettypes
istnieje, a pierwotny widok nadal istnieje.
Możemy zweryfikować, że pettypes
jest zbiorem (a nie widokiem) w następujący sposób:
db.getCollectionInfos( { "name": "pettypes"} )
Wynik:
[ { "name" : "pettypes", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("d183c7e4-44bc-4656-b272-7ad707f8dc62") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } } ]
Widzimy, że type
pole zawiera wartość collection
, co oznacza, że jest to kolekcja.
Upuść oryginalny widok
Na tym etapie mamy teraz do wyboru usunięcie oryginalnego widoku lub pozostawienie go tam.
Możemy to upuścić w ten sposób:
db.v_pettypes.drop()
Teraz, jeśli sprawdzimy kolekcje, zobaczymy, że oryginalny widok zniknął, a nowa kolekcja pozostała.
show collections
Wynik:
employees owners pets pettypes system.views