如何将MongoDB视图转换为集合

发布于

如果您在MongoDB数据库中有一个视图,您希望将其作为集合,那么您来对地方了。

下面是在MongoDB中将视图转换为集合的示例。

例

此示例演示如何使用 MongoDB 数据库工具和 .mongodump``mongorestore

如果您没有安装这些工具,请参阅 MongoDB 安装指南。

查找视图

首先,让我们看一下当前数据库中的视图和集合:

show collections

结果:

employees owners pets system.views v_pettypes

在这种情况下,实际上是一个视图。v_pettypes

我们可以使用以下查询验证它是否为视图:

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

结果:

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

我们知道这是一个视图,因为该字段的值为 .type``view

将视图转换为集合

现在,我们可以继续将该视图转换为集合。我们可以使用 MongoDB 数据库工具和 .mongodump``mongorestore

我们将用于导出视图并还原它。具体来说,我们将输出流通过管道传输到 .这样我们就可以一次完成整个事情。mongodump``mongorestore``mongodump``mongorestore

代码如下:

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

您需要从系统的命令行(例如,新的终端或命令提示符窗口)运行该代码。不要从外壳运行它。mongo

运行该代码将视图转换为在同一数据库中调用的集合。v_pettypes``pettypes

严格来说,我们实际上并没有_将视图转换为_集合。我们只是使用该参数将视图转储为集合,然后将该集合还原回数据库。因此,原始视图仍然存在。--viewsAsCollections

将视图导出为集合时, 会生成包含视图中文档的 BSON 文件。如果使用还原生成的 BSON 文件,则视图将还原为集合。mongodump``mongorestore

不使用参数,导出每个视图的元数据。如果在操作中包含视图的元数据文件,则会重新创建视图。--viewsAsCollections``mongodump``mongorestore

“使用”还会省略所有标准集合。--viewsAsCollections

检查结果

让我们再来看看我们的观点和收藏。

show collections

结果:

employees owners pets pettypes system.views v_pettypes

因此,我们可以看到一个名为“存在”的新集合,并且原始视图仍然存在。pettypes

我们可以验证这是一个集合(而不是视图),如下所示:pettypes

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

结果:

[ { “name” : “pettypes”, “type” : “collection”, “options” : {

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

]

我们可以看到该字段包含值 ,这意味着它是一个集合。type``collection

删除原始视图

在此阶段,我们现在可以选择删除原始视图或将其保留在那里。

我们可以像这样删除它:

db.v_pettypes.drop()

现在,如果我们检查集合,我们可以看到原始视图已消失,新集合仍然存在。

show collections

结果:

employees owners pets pettypes system.views