【问题标题】:MongoDB to Cosmos DB index db migrationMongoDB 到 Cosmos DB 索引数据库迁移
【发布时间】:2021-07-27 05:28:40
【问题描述】:

有没有办法自动将索引从 MongoDB 迁移到 Cosmos DB?我读过人们必须手工完成,但不可能使用工具或脚本来完成吗?或任何资源来阅读它。我有 200 个要使用多个索引迁移的集合,手动完成会花费我很多时间

【问题讨论】:

  • 当然可以。阅读 docs.mongodb.com/manual/reference/method/… 了解 shell 命令或文档,了解所选语言的确切驱动程序。
  • 我发现this answer 可以帮助你。它做了一些事情,比如导出所有创建索引命令,然后在新数据库中执行命令。但请注意,在 cosmosdb mongo api 中,只有在 collection is empty 时才能创建唯一索引。但this doc 也表示迁移将支持迁移集合中的唯一索引。

标签: mongodb azure-cosmosdb


【解决方案1】:

您可以执行一些操作,例如导出所有创建索引的命令,然后像 this answer 所说的那样在新数据库中执行这些命令。

循环遍历所有集合并为每个集合构造一个运行命令。复制打印的命令并在新数据库中执行命令。

var database = ‘my_new_db' // SHOULD ALWAYS MATCH DESTINATION DB NAME
db.getCollectionNames().forEach(function(collection){    
    var command = {}
    var indexes = []    
    idxs = db.getCollection(collection).getIndexes()        
    if(idxs.length>1){
        idxs.forEach(function(idoc){
            if(idoc.name!='_id_'){
                var ns = database+"."+idoc.ns.substr(idoc.ns.indexOf('.') + 1 )
                idoc.ns = ns
                indexes.push(idoc)
            }
        })        
        command['createIndexes'] = collection
        command['indexes'] = indexes         
        print('db.runCommand(')
        printjson(command)     
        print(')')
    }
})

您需要注意的是,唯一索引只能在集合为空时创建。就像this doc说的:

Azure 数据库迁移服务自动迁移 MongoDB 具有唯一索引的集合。但是,唯一索引必须是 在迁移之前创建。 Azure Cosmos DB 不支持 创建唯一索引,当您的数据中已有数据时 收藏品。有关详细信息,请参阅 Azure Cosmos DB 中的唯一键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-14
    • 2018-09-02
    • 2018-04-10
    • 2014-06-21
    • 2019-06-23
    • 1970-01-01
    • 2021-01-03
    • 2013-09-25
    相关资源
    最近更新 更多