Si vous avez une vue dans une base de données MongoDB que vous préférez être une collection, vous êtes au bon endroit.
Vous trouverez ci-dessous un exemple de conversion d'une vue en collection dans MongoDB.
Exemple
Cet exemple montre comment convertir une vue en une collection à l'aide des outils de base de données MongoDB mongodump
et mongorestore
.
Si vous n'avez pas installé ces outils, consultez le guide d'installation de MongoDB.
Rechercher une vue
Examinons d'abord les vues et les collections de la base de données actuelle :
show collections
Résultat :
employees owners pets system.views v_pettypes
Dans ce cas, v_pettypes
est en fait une vue.
Nous pouvons vérifier qu'il s'agit d'une vue avec la requête suivante :
db.getCollectionInfos( { "name": "v_pettypes"} )
Résultat :
[ { "name" : "v_pettypes", "type" : "view", "options" : { "viewOn" : "pets", "pipeline" : [ { "$group" : { "_id" : "$type" } } ] }, "info" : { "readOnly" : true } } ]
Nous savons qu'il s'agit d'une vue, car le type
le champ a une valeur de view
.
Convertir la vue en collection
Nous pouvons maintenant continuer et convertir cette vue en une collection. Nous pouvons le faire avec les outils de base de données MongoDB mongodump
et mongorestore
.
Nous utiliserons mongodump
pour exporter la vue, et mongorestore
pour le restaurer. Plus précisément, nous dirigerons le mongodump
flux de sortie dans mongorestore
. De cette façon, nous pouvons tout faire en même temps.
Voici le code :
mongodump --archive --db=PetHotel --collection=v_pettypes --viewsAsCollections | mongorestore --archive --nsFrom='PetHotel.v_pettypes' --nsTo='PetHotel.pettypes'
Vous devez exécuter ce code à partir de la ligne de commande de votre système (par exemple, une nouvelle fenêtre de terminal ou d'invite de commande). Ne l'exécutez pas depuis le mongo
coquille.
L'exécution de ce code a converti les v_pettypes
afficher une collection appelée pettypes
dans la même base de données.
À proprement parler, nous n'avons pas réellement converti la vue sur une collection. Nous avons simplement utilisé le --viewsAsCollections
argument pour vider la vue en tant que collection, puis nous avons restauré cette collection dans la base de données. Par conséquent, la vue originale existe toujours.
Lorsque vous exportez une vue en tant que collection, mongodump
produit un fichier BSON contenant les documents de la vue. Si vous utilisez mongorestore
pour restaurer le fichier BSON produit, la vue sera restaurée en tant que collection.
Sans utiliser le --viewsAsCollections
argument, mongodump
exporte les métadonnées de chaque vue. Si vous incluez le fichier de métadonnées d'une vue dans un mongorestore
opération, la vue est recréée.
Utilisation de --viewsAsCollections
omet également toutes les collections standard.
Vérifiez les résultats
Jetons un autre regard sur nos vues et nos collections.
show collections
Résultat :
employees owners pets pettypes system.views v_pettypes
Nous pouvons donc voir qu'une nouvelle collection appelée pettypes
existe et la vue d'origine existe toujours.
Nous pouvons vérifier que pettypes
est une collection (et non une vue) comme suit :
db.getCollectionInfos( { "name": "pettypes"} )
Résultat :
[ { "name" : "pettypes", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("d183c7e4-44bc-4656-b272-7ad707f8dc62") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } } ]
Nous pouvons voir que le type
le champ contient une valeur de collection
, ce qui signifie qu'il s'agit d'une collection.
Supprimer la vue d'origine
À ce stade, nous avons maintenant le choix de supprimer la vue d'origine ou de la laisser là.
Nous pouvons le déposer comme ceci :
db.v_pettypes.drop()
Maintenant, si nous vérifions les collections, nous pouvons voir que la vue d'origine a disparu et que la nouvelle collection reste.
show collections
Résultat :
employees owners pets pettypes system.views