sql >> Databáze >  >> NoSQL >> MongoDB

Jak převést pohled MongoDB na sbírku

Pokud máte pohled v databázi MongoDB, který byste raději sbírkou, jste na správném místě.

Níže je uveden příklad převodu pohledu na kolekci v MongoDB.

Příklad

Tento příklad ukazuje, jak převést pohled na kolekci pomocí databázových nástrojů MongoDB mongodump a mongorestore .

Pokud tyto nástroje nemáte nainstalované, podívejte se na instalační příručku MongoDB.

Najít zobrazení

Nejprve se podívejme na pohledy a kolekce v aktuální databázi:

show collections

Výsledek:

employees
owners
pets
system.views
v_pettypes

V tomto případě v_pettypes je vlastně pohled.

Že se jedná o pohled, můžeme ověřit pomocí následujícího dotazu:

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

Výsledek:

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

Víme, že jde o zobrazení, protože type pole má hodnotu view .

Převést zobrazení na kolekci

Nyní můžeme pokračovat a převést tento pohled na kolekci. Můžeme to udělat pomocí databázových nástrojů MongoDB mongodump a mongorestore .

Použijeme mongodump exportovat zobrazení a mongorestore jej obnovit. Konkrétně zavedeme mongodump výstupní stream do mongorestore . Tímto způsobem můžeme udělat celou věc najednou.

Zde je kód:

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

Tento kód musíte spustit z příkazového řádku vašeho systému (např. nový terminál nebo okno příkazového řádku). Nespouštějte jej z mongo skořápka.

Spuštěním tohoto kódu byly převedeny v_pettypes zobrazit kolekci nazvanou pettypes ve stejné databázi.

Přesněji řečeno, ve skutečnosti jsme nekonvertovali pohled na sbírku. Jednoduše jsme použili --viewsAsCollections argument vypsat pohled jako kolekci, pak jsme tuto kolekci obnovili zpět do databáze. Původní pohled tedy stále existuje.

Když exportujete pohled jako kolekci, mongodump vytvoří soubor BSON obsahující dokumenty v pohledu. Pokud používáte mongorestore pro obnovení vytvořeného souboru BSON bude pohled obnoven jako kolekce.

Bez použití --viewsAsCollections argument, mongodump exportuje metadata každého pohledu. Pokud zahrnete soubor metadat zobrazení do mongorestore operace, pohled se znovu vytvoří.

Pomocí --viewsAsCollections také vynechává všechny standardní kolekce.

Zkontrolujte výsledky

Pojďme se znovu podívat na naše pohledy a sbírky.

show collections

Výsledek:

employees
owners
pets
pettypes
system.views
v_pettypes

Můžeme tedy vidět novou kolekci s názvem pettypes existuje a stále existuje původní zobrazení.

Můžeme ověřit, že pettypes je kolekce (a nikoli pohled) takto:

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

Výsledek:

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

Vidíme, že type pole obsahuje hodnotu collection , což znamená, že se jedná o sbírku.

Vypustit původní zobrazení

V této fázi máme nyní na výběr, zda původní pohled smažeme, nebo jej tam necháme.

Můžeme to zahodit takto:

db.v_pettypes.drop()

Když nyní zkontrolujeme kolekce, můžeme vidět, že původní zobrazení je pryč a nová kolekce zůstává.

show collections

Výsledek:

employees
owners
pets
pettypes
system.views

  1. Najděte celkový čas strávený uživatelem v mongoDB

  2. Získejte konkrétní prvek z pole mongoDB

  3. Připojení k Redis To Go s PHP

  4. UnhandledPromiseRejectionWarning:MongooseServerSelectionError