MongoDB 中 runCommand 的 Liquibase 语法

Posted

技术标签:

【中文标题】MongoDB 中 runCommand 的 Liquibase 语法【英文标题】:Liquibase syntax for runCommand in MongoDB 【发布时间】:2021-09-25 09:12:05 【问题描述】:

我正在尝试将 liquibase 添加到我的项目中。我需要在创建索引和分片键的同时创建一个集合。我在 Mongo shell 中使用下一个命令,它工作正常:

db.runCommandcustomAction: "CreateCollection", collection: "name", offerThroughput: 400, shardKey: "partition_key", 索引: [key: _id: 1, name: "_id_1", key : partition_key: 1, some_key: 1, name: "partition_key_1_some_key_1", unique: true];

offerThroughput 密钥特定​​于我在项目中使用的 CosmosDB。

我尝试了下一个选项:

我的配置:

pom.xml:

    <properties>
            <liquibase.version>4.4.0</liquibase.version>
            <liquibase-maven-plugin.version>4.4.0</liquibase-maven-plugin.version>
            <liquibase-mongodb.version>4.4.0</liquibase-mongodb.version>
    </properties>
    
            <dependency>
                <groupId>org.liquibase.ext</groupId>
                <artifactId>liquibase-mongodb</artifactId>
                <version>$liquibase-mongodb.version</version>
            </dependency>
            <dependency>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>$liquibase-maven-plugin.version</version>
            </dependency>
    
     <build>
      <plugins>
            <plugin>
                    <groupId>org.liquibase</groupId>
                    <artifactId>liquibase-maven-plugin</artifactId>
                    <version>$liquibase-maven-plugin.version</version>
                    <configuration>
                        <propertyFile>src/main/resources/liquibase.properties</propertyFile>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.liquibase.ext</groupId>
                            <artifactId>liquibase-mongodb</artifactId>
                            <version>$liquibase-mongodb.version</version>
                        </dependency>
                        <dependency>
                            <groupId>org.mongodb</groupId>
                            <artifactId>mongodb-driver-sync</artifactId>
                            <version>4.2.3</version>
                            <scope>compile</scope>
                        </dependency>
                    </dependencies>
                </plugin>
      </plugins>
     </build>

根据文档(https://github.com/alexandru-slobodcicov/liquibase-mongodb#implemented-changes),我们可以使用“runCommand”。 另外,我找到了一个示例(https://github.com/liquibase/liquibase-mongodb/tree/main/src/test/resources/liquibase/ext)并尝试使用它(changelog.run-command.test.xml):

 <changeSet id="1" author="alex">

        <ext:runCommand>

            <ext:command>
                 buildInfo: 1 
            </ext:command>

        </ext:runCommand>

    </changeSet>

我尝试使用下一个更改日志文件配置运行 liquibase: db.changelog-master.xml:

<?xml version="1.0" encoding="UTF-8"?>

<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

    <changeSet id="1" author="author">

            <ext:runCommand>
                <ext:command>
                    <![CDATA[ customAction: "CreateCollection", collection: "name", offerThroughput: 400, shardKey: "partition_key", indexes: [key: _id: 1, name: "_id_1", key: partition_key: 1, some_key: 1, name: "partition_key_1_some_key_1", unique: true]]]>
                </ext:command>
            </ext:runCommand>

    </changeSet>

</databaseChangeLog>

还有下一个:

<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

    <changeSet id="1" author="author">

            <ext:runCommand>
                <ext:command>
                    customAction: "CreateCollection", collection: "name", offerThroughput: 400, shardKey: "partition_key", indexes: [key: _id: 1, name: "_id_1", key: partition_key: 1, some_key: 1, name: "partition_key_1_some_key_1", unique: true]
                </ext:command>
            </ext:runCommand>

    </changeSet>

</databaseChangeLog>

我所有的尝试都失败了。我没有找到任何使用此类命令的示例。如果有人能分享正确的语法来在 MongoDB 上为 liquibase 运行这样的命令,我将不胜感激。

【问题讨论】:

【参考方案1】:

我看到您在 liquibase 论坛上发布了相同的问题。另外,您的帖子似乎很活跃。我建议关注 liquibase 论坛post

【讨论】:

以上是关于MongoDB 中 runCommand 的 Liquibase 语法的主要内容,如果未能解决你的问题,请参考以下文章

mongo的runCommand与集合操作函数的关系

MongoDB集群设置集合分片生效

单机mongodb数据库怎么导入分片集群中

如何在mongodb中使用jsonpath?

mongodb安装到使用

SQL到MongoDB的转换