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