MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come convertire una vista MongoDB in una raccolta

Se hai una vista in un database MongoDB che preferisci essere una raccolta, sei nel posto giusto.

Di seguito è riportato un esempio di conversione di una vista in una raccolta in MongoDB.

Esempio

Questo esempio mostra come convertire una vista in una raccolta utilizzando MongoDB Database Tools mongodump e mongorestore .

Se non hai installato questi strumenti, consulta la guida all'installazione di MongoDB.

Trova una vista

Per prima cosa, diamo un'occhiata alle viste e alle raccolte nel database corrente:

show collections

Risultato:

employees
owners
pets
system.views
v_pettypes

In questo caso, v_pettypes è in realtà una vista.

Possiamo verificare che sia una vista con la seguente query:

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

Risultato:

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

Sappiamo che è una vista perché il type il campo ha un valore di view .

Converti la vista in una raccolta

Ora possiamo andare avanti e convertire quella vista in una raccolta. Possiamo farlo con MongoDB Database Tools mongodump e mongorestore .

Useremo mongodump per esportare la vista e mongorestore per ripristinarlo. In particolare, invieremo il mongodump flusso di output in mongorestore . In questo modo possiamo fare tutto in una volta.

Ecco il codice:

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

Devi eseguire quel codice dalla riga di comando del tuo sistema (ad esempio una nuova finestra del terminale o del prompt dei comandi). Non eseguirlo da mongo guscio.

L'esecuzione di quel codice ha convertito i v_pettypes visualizza una raccolta denominata pettypes nella stessa banca dati.

A rigor di termini, in realtà non abbiamo convertito la visualizzazione di una raccolta. Abbiamo semplicemente usato --viewsAsCollections argomento per eseguire il dump della vista come raccolta, quindi è stata ripristinata la raccolta nel database. Pertanto la visione originale esiste ancora.

Quando esporti una vista come raccolta, mongodump produce un file BSON contenente i documenti nella vista. Se usi mongorestore per ripristinare il file BSON prodotto, la vista verrà ripristinata come raccolta.

Senza usare --viewsAsCollections argomento, mongodump esporta i metadati di ciascuna vista. Se includi il file di metadati di una vista in un mongorestore operazione, la vista viene ricreata.

Utilizzo di --viewsAsCollections omette anche tutte le raccolte standard.

Controlla i risultati

Diamo un'altra occhiata alle nostre visualizzazioni e raccolte.

show collections

Risultato:

employees
owners
pets
pettypes
system.views
v_pettypes

Quindi possiamo vedere che una nuova raccolta chiamata pettypes esiste e la vista originale esiste ancora.

Possiamo verificare che pettypes è una raccolta (e non una vista) come segue:

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

Risultato:

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

Possiamo vedere che il type il campo contiene un valore di collection , il che significa che è una raccolta.

Rilascia la vista originale

A questo punto abbiamo ora la possibilità di eliminare la vista originale o lasciarla lì.

Possiamo rilasciarlo in questo modo:

db.v_pettypes.drop()

Ora, se controlliamo le raccolte, possiamo vedere che la vista originale è scomparsa e la nuova raccolta rimane.

show collections

Risultato:

employees
owners
pets
pettypes
system.views