Modulus上的Meteor应用程序 - 如何重置数据库

one*_*lid 5 deployment mongodb meteor

我在Modulus上运行一个分阶段的Meteor应用程序,想知道是否有办法在远程mongoDB上执行类似于'meteor reset'的操作.

我可以通过运行使用mongo的命令行,db.dropDatabase();但是这也会删除system.users包含mongo数据库帐户的命令行.

有兴趣知道如何在部署流程中实现这一目标.

Kub*_*bek 7

当你运行时,meteor reset流星递归删除所有目录和文件: .meteor/local.

  # source : meteor/tools/commands.js (line 806-807)
  ...
  var localDir = path.join(options.appDir, '.meteor', 'local');
  files.rm_recursive(localDir);
  ...
Run Code Online (Sandbox Code Playgroud)

我知道你想从MongoDB中存储的数据库中删除特定的集合.这样做的方法很少:

从shell或mongo shell中删除集合

编写脚本,循环遍历要删除的集合的名称,然后db.getCollection(name).drop()在每个集合上执行 .

来自cmd:mongo [数据库] --eval"db.getCollection([collectionName]).drop();"

或者来自mongo shell:

db.getCollection([collectionName]).drop();
Run Code Online (Sandbox Code Playgroud)

使用Robomongo从MongoDB中删除集合

这是一种简单的方法:单击并删除.

有用的说明如果可以使用ssh连接到mongo的服务器:

如果您具有对服务器的SSH访问权限,那么您可以将远程端口Y隧道连接到本地端口X,因此mongo将在端口X上本地可用:

ssh -L27018:localhost:27017 user@host
Run Code Online (Sandbox Code Playgroud)

然后在Robomongo中创建与localhost:27018的连接,并且您可以访问远程数据库.

直接从Meteor App中删除集合.

if(Meteor.isServer){
  Collection.remove({}) 
}
Run Code Online (Sandbox Code Playgroud)

我的一个生产应用程序在部署新版本时删除了一些集合:

 if(Meteor.isServer){
    Meteor.startup(function(){
      if(cleanDB){
        CollectionA.remove({});
        CollectionB.remove({});
        CollectionC.remove({});
      }
    })
 }
Run Code Online (Sandbox Code Playgroud)