Mongo Shell 和 .js 脚本通过过滤部分名称并将其与 var 进行比较来重命名集合
Mongo Shell and .js script to rename collection by filtering part of name and comparing it to a var
我正在尝试构建要在 mongo shell 中执行的 .js 脚本,需要执行以下操作:
- 获取包含单词“CollectionUpgrade”的所有集合名称的列表
- 将每个集合名称的结尾部分分开(它们被命名为 CollectionUpgrade_20 和 21 和 22 等等,直到 29)所以我可以将它与版本模式(假设 28)进行比较,如果有任何 CollectionUpgrade_30 或 31 将它们重命名为 CollectionUpgrade_30_old 和 _31_old.
- 列出重命名的集合。
一段时间以来,我一直在尝试寻找一种方法,但似乎无济于事,我可以利用 mongoshell/js 大师的智慧!
我找不到输入查询的方法,我看到一些关于提示密码可能性的帖子,用户可以在此处粘贴要添加的确切集合名称:
db.UpgradeCollection_XX.renameCollection("UpgradeCollection_XX_old");
集合的名称可以不同,例如 UsersCollectionUpgrade_22
我只想将结束编号与架构匹配,并确保不存在更高的编号
我也尝试了一些 if 语句并结合了一段时间,但我没有成功。
另一种尝试是要求用户将集合的确切名称输入 cmd 输入并将其转换为我在上述命令中复制的 var 然后 > fix.js 和 运行 这与 mongo shell 但这并没有完全符合我的预期 - 正在进行中。
数据库中的集合名称示例:
Schema version:28
[
"appInfosCollectionUpgrade_18",
"appInfosCollectionUpgrade_20",
"appInfosCollectionUpgrade_21",
"appInfosCollectionUpgrade_27",
"appInfosCollectionUpgrade_28",
"collectionsCollectionUpgrade_22",
"collectionsCollectionUpgrade_23",
"collectionsCollectionUpgrade_27",
"collectionsCollectionUpgrade_30",
"configurationsCollectionUpgrade_10",
"configurationsCollectionUpgrade_11",
"configurationsCollectionUpgrade_12",
"configurationsCollectionUpgrade_17",
"configurationsCollectionUpgrade_20",
"configurationsCollectionUpgrade_21",
"configurationsCollectionUpgrade_26",
"configurationsCollectionUpgrade_27",
"configurationsCollectionUpgrade_6",
"configurationsCollectionUpgrade_7",
"configurationsCollectionUpgrade_8",
"configurationsCollectionUpgrade_9",
"districtsCollectionUpgrade_27",
"subscriptionsCollectionUpgrade_19",
"subscriptionsCollectionUpgrade_20",
"subscriptionsCollectionUpgrade_21",
"subscriptionsCollectionUpgrade_25",
"subscriptionsCollectionUpgrade_27",
"userCollectionUpgrade_30",
"usersCollectionUpgrade_19",
"usersCollectionUpgrade_20",
"usersCollectionUpgrade_24",
"usersCollectionUpgrade_25",
"usersCollectionUpgrade_27",
"usersCollectionUpgrade_31"
]
任何提示想法或帮助都会对这个苦苦挣扎的人有很大帮助!
您可以根据您的大纲编写管理脚本如下:
var newVersion = passwordPrompt();
var collectionsWithWordOnly = name => name.startsWith('CollectionUpgrade');
var olderVersionsOnly = name => {
var [_, version, old] = name.split('_');
if (old) {
return false;
}
if (+version <= +newVersion) {
return false;
}
return true;
};
var renameAsOldVersion = (name) => {
var newName = `${name}_old`;
db[name].renameCollection(newName);
};
db.getCollectionNames()
.filter(collectionsWithWordOnly)
.filter(olderVersionsOnly)
.forEach(renameAsOldVersion);
我正在尝试构建要在 mongo shell 中执行的 .js 脚本,需要执行以下操作:
- 获取包含单词“CollectionUpgrade”的所有集合名称的列表
- 将每个集合名称的结尾部分分开(它们被命名为 CollectionUpgrade_20 和 21 和 22 等等,直到 29)所以我可以将它与版本模式(假设 28)进行比较,如果有任何 CollectionUpgrade_30 或 31 将它们重命名为 CollectionUpgrade_30_old 和 _31_old.
- 列出重命名的集合。
一段时间以来,我一直在尝试寻找一种方法,但似乎无济于事,我可以利用 mongoshell/js 大师的智慧!
我找不到输入查询的方法,我看到一些关于提示密码可能性的帖子,用户可以在此处粘贴要添加的确切集合名称:
db.UpgradeCollection_XX.renameCollection("UpgradeCollection_XX_old");
集合的名称可以不同,例如 UsersCollectionUpgrade_22
我只想将结束编号与架构匹配,并确保不存在更高的编号
我也尝试了一些 if 语句并结合了一段时间,但我没有成功。
另一种尝试是要求用户将集合的确切名称输入 cmd 输入并将其转换为我在上述命令中复制的 var 然后 > fix.js 和 运行 这与 mongo shell 但这并没有完全符合我的预期 - 正在进行中。
数据库中的集合名称示例:
Schema version:28
[
"appInfosCollectionUpgrade_18",
"appInfosCollectionUpgrade_20",
"appInfosCollectionUpgrade_21",
"appInfosCollectionUpgrade_27",
"appInfosCollectionUpgrade_28",
"collectionsCollectionUpgrade_22",
"collectionsCollectionUpgrade_23",
"collectionsCollectionUpgrade_27",
"collectionsCollectionUpgrade_30",
"configurationsCollectionUpgrade_10",
"configurationsCollectionUpgrade_11",
"configurationsCollectionUpgrade_12",
"configurationsCollectionUpgrade_17",
"configurationsCollectionUpgrade_20",
"configurationsCollectionUpgrade_21",
"configurationsCollectionUpgrade_26",
"configurationsCollectionUpgrade_27",
"configurationsCollectionUpgrade_6",
"configurationsCollectionUpgrade_7",
"configurationsCollectionUpgrade_8",
"configurationsCollectionUpgrade_9",
"districtsCollectionUpgrade_27",
"subscriptionsCollectionUpgrade_19",
"subscriptionsCollectionUpgrade_20",
"subscriptionsCollectionUpgrade_21",
"subscriptionsCollectionUpgrade_25",
"subscriptionsCollectionUpgrade_27",
"userCollectionUpgrade_30",
"usersCollectionUpgrade_19",
"usersCollectionUpgrade_20",
"usersCollectionUpgrade_24",
"usersCollectionUpgrade_25",
"usersCollectionUpgrade_27",
"usersCollectionUpgrade_31"
]
任何提示想法或帮助都会对这个苦苦挣扎的人有很大帮助!
您可以根据您的大纲编写管理脚本如下:
var newVersion = passwordPrompt();
var collectionsWithWordOnly = name => name.startsWith('CollectionUpgrade');
var olderVersionsOnly = name => {
var [_, version, old] = name.split('_');
if (old) {
return false;
}
if (+version <= +newVersion) {
return false;
}
return true;
};
var renameAsOldVersion = (name) => {
var newName = `${name}_old`;
db[name].renameCollection(newName);
};
db.getCollectionNames()
.filter(collectionsWithWordOnly)
.filter(olderVersionsOnly)
.forEach(renameAsOldVersion);