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

时间:2014-08-13 03:01:45

标签: mongodb deployment meteor

我在Modulus上运行一个分阶段的Meteor应用程序,想知道是否有办法做类似于“流星重置”的事情。在远程mongoDB上。

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

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

3 个答案:

答案 0 :(得分:7)

当您运行meteor reset时,meteor以递归方式从以下位置删除所有目录和文件: .meteor/local

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

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

从shell或mongo shell中删除集合

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

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

或来自mongo shell:

db.getCollection([collectionName]).drop();

使用Robomongo

从MongoDB中删除集合

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

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

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

ssh -L27018:localhost:27017 user@host

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

直接从Meteor App中删除馆藏。

if(Meteor.isServer){
  Collection.remove({}) 
}

我的一个制作应用程序会在部署新版本时删除一些集合:

 if(Meteor.isServer){
    Meteor.startup(function(){
      if(cleanDB){
        CollectionA.remove({});
        CollectionB.remove({});
        CollectionC.remove({});
      }
    })
 }

答案 1 :(得分:1)

如果你想在Modulus上使用MongoDB shell:

db.getCollectionNames().forEach(function(name) {
  if (name.indexOf('system.') === -1) {
    db.getCollection(name).drop();
  }
})

使用Robomongo应用程序连接并执行此命令,或在命令行上使用:

mongo <dbname> --host proximus.modulusmongo.net:27017 --username <username> --password <password> --eval "db.getCollectionNames().forEach(function(name) {if (name.indexOf('system.') === -1) {db.getCollection(name).drop();}})"

答案 2 :(得分:1)

我相信在modulus.io上执行此操作的最简单方法是访问您的数据库并删除您想要删除的集合。

在终端$ mongo waffle.modulusmongo.net:27017/izezeB9a -u DB_UserName -p Password

中运行以下命令

当您连接到您的数据库时,请删除正在运行的集合:&gt; db.YourCollection.drop()

希望这有帮助,

欢呼;)