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

标签 mongodb deployment meteor

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

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

有兴趣了解如何在部署流程中实现这一点。

最佳答案

当您运行 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 的服务器:

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

ssh -L27018:localhost:27017 user@host

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

直接从 Meteor 应用程序中删除集合。

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

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

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

关于mongodb - Modulus 上的 Meteor 应用程序——如何重置数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25277378/

相关文章:

javascript - Meteor:如何将项目推送到用户集合并创建列表或数组,而不是用新项目替换每个项目?

node.js - Mongoose 子文档排序

ruby-on-rails - Rails 3 计算嵌入式记录的年龄

continuous-integration - Jenkins - 如果构建失败,则部署上次成功构建的工件

java - Maven 部署到 Google Cloud。 appengine 是否为 :deploy perform a full clean/build?

java - 将 EAR 的多个实例(代表版本)部署到 Glassfish

javascript - 返回未定义的 Posts.findOne();

mongodb - 如何在 MongoDB 中通过将数组元素与 MapReduce 匹配来对文档进行分组?

node.js - 在 mongoose 中查找相对于我的坐标在 10 英里半径内的附近用户

javascript - 从其他模板相关函数调用辅助函数