如何将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