【问题标题】:MongoDB to Cosmos DB index db migrationMongoDB 到 Cosmos DB 索引数据库迁移
【发布时间】:2021-07-27 05:28:40
【问题描述】:
有没有办法自动将索引从 MongoDB 迁移到 Cosmos DB?我读过人们必须手工完成,但不可能使用工具或脚本来完成吗?或任何资源来阅读它。我有 200 个要使用多个索引迁移的集合,手动完成会花费我很多时间
【问题讨论】:
标签:
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 中的唯一键。