【MongoDB】MongoDB表,字段值中字符串替换

2024-04-04  本文已影响0人  Bogon

需求描述

将MongoDB数据库 testDB库testColl表的url字段的值(字符串)中可能存在的 www.example01.com 替换为 www.example02.com

$ cat replaceString.js

// 获取名为testDB的数据库
var testDB = db.getSisterDB("testDB");

// 查询testColl集合中的所有文档
var cursor = testDB.testColl.find();

// 计数器初始化为0
var count = 0;

// 当查询结果中还有文档时执行循环
while (cursor.hasNext()) {
    // 获取下一个文档
    var x = cursor.next();

    // 检查文档中的url字段是否为null、undefined或'undefined',或者是否未定义
    if (x.url == null || x.url == undefined || x.url == 'undefined' || typeof (x.url) == 'undefined') {
        print("exit");
    } else {
        // 替换url中的特定字符串
        var url1 = x.url.replace('www.example01.com', 'www.example02.com');
        
        // 更新文档中的url字段为替换后的值
        testDB.testColl.update({_id: x._id}, {"$set": {"url": url1}});
        
        // 输出原始url和替换后的url
        print(x.url);
        print(url1);
        
        // 计数器加1
        count++;
    }
}

// 输出替换完成的url数量
print(count);

优化版

在几个领域,该代码可以优化:

var testDB = db.getSisterDB("testDB");
var cursor = testDB.testColl.find({}, {_id: 1, url: 1}); // Projection to only retrieve _id and url
var bulkUpdateOps = [];
var count = 0;

while (cursor.hasNext()) {
    var doc = cursor.next();
    
    // Check if url needs replacement
    if (doc.url && typeof doc.url === 'string' && doc.url.includes('www.example01.com')) {
        var updatedUrl = doc.url.replace('www.example01.com', 'www.example02.com');
        bulkUpdateOps.push({
            'updateOne': {
                'filter': { '_id': doc._id },
                'update': { '$set': { 'url': updatedUrl } }
            }
        });
        count++;
    }
}

if (bulkUpdateOps.length > 0) {
    var bulkWriteResult = testDB.testColl.bulkWrite(bulkUpdateOps); // Perform bulk update
    print('Updated ' + bulkWriteResult.modifiedCount + ' documents');
}

print('Total documents processed: ' + count);

在此优化版本中:

上一篇 下一篇

猜你喜欢

热点阅读