MongoDB數(shù)據(jù)庫類replace替換字符串指定內(nèi)容
需求介紹
根據(jù)業(yè)務(wù)發(fā)展,現(xiàn)在需要對(duì)已經(jīng)存在的數(shù)據(jù)進(jìn)行處理,需要替換掉字段中指定字符串。
目的數(shù)據(jù)結(jié)構(gòu)為:
{ "_id" : ObjectId("6166fa27de458266eecdb288"), "receiverId" : NumberLong(1011500013127618), "senderId" : NumberLong(1011500000008954), "companyId" : 1.0, "status" : 1.0, "dataSources" : 4.0, "senderType" : "employee", "receiverType" : "customer", "mediaType" : "text", "connectMode" : "sys_follow", "messageType" : "conversation", "businessId" : NumberLong(1011500013127618), "createTime" : ISODate("2020-01-21T04:01:23.000Z"), "updateTime" : ISODate("2020-01-21T04:01:23.000Z"), "message" : "1.資產(chǎn)京東:無\r\n2.工作京東:現(xiàn)金\r\n3.貸款用途:\r\n4.需要金額和時(shí)間:\r\n5.推薦產(chǎn)品:\r\n6.報(bào)費(fèi)京東:\r\n7.征信負(fù)債:\r\n8.不簽約原因:", "_class" : "com.ysjr.base.domain.entity.ConversationInfo", "followId" : NumberLong(1011500031014664), "followType" : "FW001", "result" : 1, "intention" : "FI006", "loseOrderReason" : [ "LR003" ], "exec" : 1.0 }
需要將跟進(jìn)數(shù)據(jù)的 message 字段中的 ”京東“ 字段替換為 ”其他“。
技術(shù)分析
分析發(fā)現(xiàn)在MYSQL等關(guān)系數(shù)據(jù)庫中有replace函數(shù),對(duì)字符串中的字符進(jìn)行替換。對(duì)于mongodb經(jīng)查詢官方文檔,發(fā)現(xiàn)也有相似的語法可以實(shí)現(xiàn)替換功能。如下所示:
1、$replaceOne 語法,但是每次只能更新字符串中發(fā)現(xiàn)的第一個(gè)目的串
2、javascript語法,在mongodb語法中寫js代碼來替換字符串,該種方式可以兼容多個(gè)目的串的情況,缺點(diǎn)是執(zhí)行效率慢
3、java代碼,java代碼直接獲取字符串進(jìn)行replaceAll() 函數(shù)替換 ,缺點(diǎn)是需要寫代碼并且執(zhí)行效率慢。
綜合以上實(shí)現(xiàn)方式,結(jié)合實(shí)際需求,我們本次數(shù)據(jù)處理選擇第二種方式 javascript 語法集合mongodb語法實(shí)現(xiàn)。雖然執(zhí)行效率慢,但是如果采用第一種我們需要執(zhí)行多次,第三種需要寫代碼。對(duì)于一個(gè)一次性處理數(shù)據(jù)的需求,采用簡(jiǎn)單有效且僅損失部分性能我們是可以接受的。
技術(shù)積累
1、replaceOne 語法
db.getCollection('集合名稱') .updateMany( {},//查詢條件 [{ $set: {"字段名稱": { $replaceOne: { input:"字段名稱", find:"需要替換的字符", replacement:"目的字符" }//替換語法 }} }] );
2、javascript語法
db.getCollection('集合名稱') .find({})//查詢條件 .forEach(//循環(huán)獲取目標(biāo)數(shù)據(jù) function(item) { var message = item['字符名稱']; message = message.replace(/需要替換的字符/g, '目的字符');//目標(biāo)字符串替換,/g 標(biāo)識(shí)全局變量直接解決raplaceAll不支持方案,可以替換多個(gè)串 db.getCollection('集合名稱').updateOne({"_id":item['_id']},{$set:{"字段名稱":message,"exec":1}});//修改目標(biāo)字段,完成替換 });
實(shí)戰(zhàn)演示
將所有跟進(jìn)數(shù)據(jù)的 message 字段中的 ”京東“ 字段替換為 ”其他“
我們直接在測(cè)試環(huán)境用第二種示范:
1、查詢滿足條件的數(shù)據(jù)
db.getCollection('conversation_info') .find({"connectMode":"sys_follow","message":{$regex:"京東",$options:"$i"}})
如圖所示有在測(cè)試環(huán)境數(shù)據(jù)庫中有兩條,其中一條目標(biāo)字段中有多個(gè)目的字符串。
2、在mongodb語法中融入javascript語法并執(zhí)行
db.getCollection('conversation_info') .find({"connectMode":"sys_follow","message":{$regex:"京東",$options:"$i"}}) .forEach( function(item) { var message = item['message']; message = message.replace(/京東/g, '其他'); db.getCollection('conversation_info').updateOne({"_id":item['_id']},{$set:{"message":message,"exec":1}}); });
如圖所示執(zhí)行完成,提示成功但語法效率較低。
3、查看剛剛被修改的數(shù)據(jù)
db.getCollection('conversation_info') .find({"connectMode":"sys_follow","message":{$regex:"其他",$options:"$i"}})
如圖所示,發(fā)現(xiàn)全部替換為目標(biāo)字符串,測(cè)試完成。
總結(jié):
MongoDB 類replace替換字符串指定內(nèi)容,replaceOne 語法僅能夠替換目標(biāo)字段中第一次出現(xiàn)的字符串,如果出現(xiàn)多次需要多次執(zhí)行 replaceOne 語法;如果用javascript 語法可以完全兼容多個(gè)目標(biāo)字符替換,極大的方便我們處理數(shù)據(jù)。
到此這篇關(guān)于MongoDB數(shù)據(jù)庫類replace替換字符串指定內(nèi)容的文章就介紹到這了,更多相關(guān)MongoDB替換字符串內(nèi)容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MongoDB創(chuàng)建與刪除數(shù)據(jù)庫
這篇文章介紹了MongoDB創(chuàng)建與刪除數(shù)據(jù)庫的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06MongoDB mongoexport工具的使用簡(jiǎn)介
這篇文章主要介紹了MongoDB mongoexport工具的使用簡(jiǎn)介,幫助大家更好的理解和學(xué)習(xí)使用MongoDB數(shù)據(jù)庫,感興趣的朋友可以了解下2021-03-03Mongodb 崩潰報(bào)錯(cuò) Too many open files的問題解析
這篇文章主要介紹了Mongodb 崩潰報(bào)錯(cuò) Too many open files的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12MongoDB系列教程(八):GridFS存儲(chǔ)詳解
這篇文章主要介紹了MongoDB系列教程(八):GridFS存儲(chǔ)詳解,本文講解了什么是GridFS、GridFS的實(shí)現(xiàn)原理等內(nèi)容,需要的朋友可以參考下2015-05-05mongodb 數(shù)據(jù)庫操作詳解--創(chuàng)建,切換,刪除
mongodb是nosql里面最像關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫。單表操作,基本上可以和關(guān)系型數(shù)據(jù)庫差不多。mongodb比較易學(xué),易用,分幾期記錄一下,學(xué)習(xí)和使用mongodb過程。2014-07-07記一次Mongodb中admin數(shù)據(jù)庫導(dǎo)致的事故
這篇文章主要給大家介紹了關(guān)于一次Mongodb中admin數(shù)據(jù)庫導(dǎo)致的事故的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03MongoDB 3.4配置文件避免入坑的注意事項(xiàng)
最近在配置mongodb的時(shí)候遇到了一些問題,現(xiàn)總結(jié)出來方便以后需要或同樣遇到該問題的朋友們參考,下面這篇文章主要給大家介紹了關(guān)于MongoDB 3.4配置文件時(shí)避免入坑的兩個(gè)注意事項(xiàng),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)下吧。2017-09-09Mongo復(fù)制集同步驗(yàn)證的實(shí)例詳解
這篇文章主要介紹了mongo復(fù)制集同步驗(yàn)證的實(shí)例詳解的相關(guān)資料,這里提供實(shí)現(xiàn)的方法及示例代碼,幫助大家學(xué)習(xí)理解,需要的朋友可以參考下2017-07-07