MongoDB-有条件地执行命令

时间:2020-05-13 10:10:00

标签: mongodb

我需要根据Mongo版本有条件地执行迁移脚本(mongock Java库)中的一部分命令

如果Mongo版本低于4.2,我需要执行此命令。对于Mongo 4.2及更高版本,不应执行该程序。

db.getSiblingDB('admin').runCommand( { setParameter: 1, failIndexKeyTooLong: false } )

有办法吗?

谢谢

卢卡斯

1 个答案:

答案 0 :(得分:0)

不知道您是否已经找到解决方案。

想法是找出changeSet内的Mongo版本,然后执行所需的操作。

我假设您使用的是最新的Mongock版本3.x.x,即3.3.2或4.0.x.alpha,因此您应该使用MongockTemplate而不是MongoTemplate。不用担心,它只是包装器/装饰器,您不会错过原始API中的任何内容。

因此您可以执行以下操作:

@ChangeSet(id = "changeset-1", order = "001", author = "mongock")
public void changeSet(MongockTemplate mongockTemplate, ClientRepository clientRepository) {
    String version = mongockTemplate.executeCommand(new Document("buildinfo", new BsonString("")))
            .get("version")
            .toString();
    if(getNumericalVersion(version) < 42) {
        //do your actions
    } else {
        //do you other actions
    }
}

注意1:我们不建议使用executeCommand。在这种情况下,使用该版本就可以了,但是一般而言,我们建议不要使用它,尤其是写操作。

注2:当前,我们正在开发版本4,该版本将允许扫描多个程序包甚至隔离的ChangeLog类。因此,另一种方法是在bean创建中获取版本,然后根据MongoDB的版本是否注入更改