nosqlBooster免费版不支持copyDatabase命令,只好自己动手,写个简单for循环脚本,效率不高 还是建议安装的时候装一个破解版
// ## 迁移所有vm开头的前缀表,线上使用时需要修改对应的入库的库名
db.getCollectionNames().forEach(function(collName) {
if (collName.startsWith("Vm_") ) {
var bulk = db.getSiblingDB('SOAR_DB')[collName].initializeUnorderedBulkOp();
if (collName === "Vm_vulnerability") {
print("----------------start ", collName, " migration----------------")
var ops = 0
db.getCollection(collName).find({ "is_deleted": 0 }).forEach(function(d) {
if (NumberInt(d.module) == 205 || NumberInt(d.module) == 209 || NumberInt(d.module) == 211) {
d["scan_method"] = NumberInt(1)
} else {
d["scan_method"] = NumberInt(0)
}
d["migrate_flag"] = NumberInt(1)
// 增加task_name字段,这一段放到代码里面去执行
// var task_record = db.Vm_totaltask.findOne({ _id: d.totaltask_id })
// d["task_name"] = task_record["task_name"]
// 增加资产责任
bulk.insert(d);
if ((++ops % 2000) === 0) {
print(collName, " insert ops: ", ops)
bulk.execute();
bulk = db.getSiblingDB('SOAR_DB')[collName].initializeUnorderedBulkOp();
}
});
bulk.execute();
print("----------------end ", collName, " migration----------------")
} else if (collName === "Vm_task_asset"){
print("----------------please migrate Vm_task_asset collection by direct copy!------------------")
} else {
print("----------------start ", collName, " migration----------------")
var ops = 0
db.getCollection(collName).find({}).forEach(function(d) {
d["migrate_flag"] = NumberInt(1)
bulk.insert(d);
if ((++ops % 5000) === 0) {
print(collName, "insert ops: ", ops)
bulk.execute();
print("----------------end ", collName, " migration----------------")
}
}
});
破解版注册码如下:
用户名随便写,注册码如下
3.x码: 999999-137f36b4127c02086570842ae5d2d28a
4.x码: 999999-fa52c1e219e5c0bb298e48e3ef1cf1e2
5.x码: 999999-9d5988960387b3f63481722566cb0e9f
6.x码: 999999-96342b95d18d990e42e4e4a1a0bb403a