【解决】MongoDB 线上业务处理,数据去重脚本实现

时间:2023-03-09 00:10:19
【解决】MongoDB 线上业务处理,数据去重脚本实现
mongo客户端工具下载  https://robomongo.org/download
线上业务,k线 展示出现问题,相同时间戳的数据多次插入导致数据不真实,后经排查发现是每次都是写的四条数据,找开发配合一起查找问题,发现是后台逻辑处理的问题
需求:将重复的数据去掉,只保留一份数据
客户端数据查询:
【解决】MongoDB 线上业务处理,数据去重脚本实现 
  由于表太多 一张一张去删 很麻烦 于是写了个脚本偷懒
 #!/bin/bash
# liyongjian5179@.com
#将所有的表名导出来
mongo 192.168.112.128:/admin -uadmin -plyj &> .txt <<EOF
use user_center;
show collections
exit;
EOF sed -i '1,4d' .txt
#tail -n .txt > .txt
for TABLE in `cat .txt` ;do
echo ${TABLE}
#查重
mongo 192.168.112.128:/admin -uadmin -plyj <<EOF
use user_center
db.${TABLE}.aggregate([{\$group:{_id:{createTime:'\$createTime'},count:{\$sum:}}},{\$match:{count:{\$gt:}}}])
exit
EOF
STATUS=`echo $?`
echo $STATUS
if [ $STATUS = ];then
#去重
mongo 192.168.112.128:/admin -uadmin -plyj <<EOF
use user_center;
db["${TABLE}"].aggregate([{\$group: { _id: {createTime: '\$createTime'},count: {\$sum: },dups: {\$addToSet: '\$_id'}}},{\$match: {count: {\$gt: }}}]).forEach(function(doc){doc.dups.shift(); db["${TABLE}"].remove({_id: {\$in: doc.dups}}); });
exit
EOF
TATUS=`echo $?`
echo $STATUS
if [ $STATUS = ];then echo "去重 success" ; else echo "fail" ;fi else
echo "wrong"
exit fi
done
库如下:
> show dbs
admin        0.000GB
local        0.000GB
test         0.002GB
user_center  0.111GB
表如下:
btc_cnyt_12hour_kline
btc_cnyt_15min_kline
btc_cnyt_1hour_kline
btc_cnyt_1min_kline
btc_cnyt_2hour_kline
btc_cnyt_30min_kline
btc_cnyt_3day_kline
btc_cnyt_3min_kline
btc_cnyt_4hour_kline
btc_cnyt_5min_kline
btc_cnyt_6hour_kline
btc_cnyt_day_kline
btc_cnyt_week_kline
cnytplus_cnyt_12hour_kline
cnytplus_cnyt_15min_kline
cnytplus_cnyt_1hour_kline
cnytplus_cnyt_1min_kline
cnytplus_cnyt_2hour_kline
cnytplus_cnyt_30min_kline
cnytplus_cnyt_3day_kline
cnytplus_cnyt_3min_kline
cnytplus_cnyt_4hour_kline
cnytplus_cnyt_5min_kline
cnytplus_cnyt_6hour_kline
cnytplus_cnyt_day_kline
cnytplus_cnyt_week_kline
cnytplus_eth_12hour_kline
cnytplus_eth_15min_kline
cnytplus_eth_1hour_kline
cnytplus_eth_1min_kline
cnytplus_eth_2hour_kline
cnytplus_eth_30min_kline
cnytplus_eth_3day_kline
cnytplus_eth_3min_kline
cnytplus_eth_4hour_kline
cnytplus_eth_5min_kline
cnytplus_eth_6hour_kline
cnytplus_eth_day_kline
cnytplus_eth_week_kline
eos_cnyt_12hour_kline
eos_cnyt_15min_kline
eos_cnyt_1hour_kline
eos_cnyt_1min_kline
eos_cnyt_2hour_kline
eos_cnyt_30min_kline
eos_cnyt_3day_kline
eos_cnyt_3min_kline
eos_cnyt_4hour_kline
eos_cnyt_5min_kline
eos_cnyt_6hour_kline
eos_cnyt_day_kline
eos_cnyt_week_kline
eth_cnyt_12hour_kline
eth_cnyt_15min_kline
eth_cnyt_1hour_kline
eth_cnyt_1min_kline
eth_cnyt_2hour_kline
eth_cnyt_30min_kline
eth_cnyt_3day_kline
eth_cnyt_3min_kline
eth_cnyt_4hour_kline
eth_cnyt_5min_kline
eth_cnyt_6hour_kline
eth_cnyt_day_kline
eth_cnyt_week_kline
ltc_cnyt_12hour_kline
ltc_cnyt_15min_kline
ltc_cnyt_1hour_kline
ltc_cnyt_1min_kline
ltc_cnyt_2hour_kline
ltc_cnyt_30min_kline
ltc_cnyt_3day_kline
ltc_cnyt_3min_kline
ltc_cnyt_4hour_kline
ltc_cnyt_5min_kline
ltc_cnyt_6hour_kline
ltc_cnyt_day_kline
ltc_cnyt_week_kline
usdt_cnyt_12hour_kline
usdt_cnyt_15min_kline
usdt_cnyt_1hour_kline
usdt_cnyt_1min_kline
usdt_cnyt_2hour_kline
usdt_cnyt_30min_kline
usdt_cnyt_3day_kline
usdt_cnyt_3min_kline
usdt_cnyt_4hour_kline
usdt_cnyt_5min_kline
usdt_cnyt_6hour_kline
usdt_cnyt_day_kline
usdt_cnyt_week_kline