我正在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中的数据库中删除特定的集合。有几种方法可以做到这一点:
从外壳或 mongo shell 中删除集合
编写脚本,循环访问要删除的集合的名称,然后执行 db.getCollection(name).drop()
每一个。
从 cmd: mongo [database] --eval "db.getCollection([collectionName](.drop((;">
或来自蒙戈壳:
db.getCollection([collectionName]).drop();
使用 Robomongo 从 MongoDB 中删除集合
这是简单的方法:单击并删除。
如果可以使用ssh连接到mongo的服务器,则有用的说明:
如果您对 mongo 所在的服务器具有 SSH 访问权限,则可以将远程端口 Y 隧道传输到本地端口 X,因此 mongo 将在端口 X 上本地可用:
ssh -L27018:localhost:27017 user@host
然后在 Robomongo 中创建与 localhost:27018 的连接,并且您可以访问远程数据库。
直接从流星应用程序中删除集合。
if(Meteor.isServer){
Collection.remove({})
}
我的一个生产应用在部署新版本时删除了一些集合:
if(Meteor.isServer){
Meteor.startup(function(){
if(cleanDB){
CollectionA.remove({});
CollectionB.remove({});
CollectionC.remove({});
}
})
}
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();}})"
modulus.io 上执行此操作的最简单方法是访问您的数据库并删除您想要删除的集合。
在终端 $ mongo waffle.modulusmongo.net:27017/izezeB9a -u DB_UserName -p Password
中运行以下命令
当您连接到数据库时,删除该集合运行:> db.YourCollection.drop()
希望这有帮助,
欢呼;)