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