MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment convertir une vue MongoDB en une collection

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