我可以在groovy文件中运行mongorestore命令吗?

时间:2016-08-11 13:36:50

标签: mongodb groovy mongorestore

我有一个groovy脚本,它删除了一个db并从现有备份恢复数据库(SQL)

Sql sql = Sql.newInstance(dbSQLUrl, userName, password) 

我传递了所有必需的参数并运行sql.execute(),如下所示,

sql.execute(
        alter database dbName
        set offline with rollback immediate
        drop database dbName
       )


sql.execute(
    RESTORE DATABASE dbName
    FROM disk = 'C:\Backups'
    WITH REPLACE
)

以上所有代码都完美无缺。我也需要为MongoDB实现这个。在Mongo中是否有等效于sql.execute()的地方,我可以在groovy文件中运行像mongorestore这样的Mongo命令。

对于Mongo,我有以下代码:

List credentials = []
List servers = []

credentials.push(MongoCredential.createCredential(mongoUserName, mongoDBName, mongoPassword as char[]))
servers.push(new ServerAddress(mongoHost, mongoPort))

GMongoClient mongoClient = new GMongoClient(servers,credentials)
DB mongoDB = mongoClient.getDB(mongoDBName)
mongoDB.dropDatabase()

现在我需要在我的groovy文件中运行/包含以下命令, mongorestore ~/backups/first_backup/

有什么方法可以实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

简而言之,使用MongoDB驱动程序无法实现这一点。这些命令只能从命令行(即MongoDB shell)调用。您可能需要将日期导出为CSV并以编程方式将数据导入MongoDB,这将非常慢。

否则,您可能需要使用Groovy libs执行该命令。与下面的Java命令类似。

Runtime.getRuntime()。exec(“mongoimport -d -h<> ..”);

Similar question for Java Driver

答案 1 :(得分:0)

不确定这是执行所需操作的最有效方法,但您可以通过将此命令添加到代码中来调用该命令并等待它完成:

String command = "mongorestore ${System.properties['user.home']}/backups/first_backup"
Process p = command.execute()
p.waitFor()