MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak przekonwertować widok MongoDB na kolekcję

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

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy MongoDB może używać indeksu podczas sprawdzania istnienia pola z operatorem $exists?

  2. Uwierzytelnianie użytkownika w kolbie

  3. Jak przeprowadzić wyszukiwanie pełnotekstowe w MongoDB?

  4. Jak zainstalować wcześniejszą wersję mongodb z homebrew?

  5. Kodek MongoDB BSON nie jest używany podczas kodowania obiektu