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

mongo客户端工具下载  https://robomongo.org/download
 
线上业务,k线 展示出现问题,相同时间戳的数据多次插入导致数据不真实,后经排查发现是每次都是写的四条数据,找开发配合一起查找问题,发现是后台逻辑处理的问题
 
需求:将重复的数据去掉,只保留一份数据
 
客户端数据查询:
 
【解决】MongoDB 线上业务处理,数据去重脚本实现_第1张图片 
 
  由于表太多 一张一张去删 很麻烦 于是写了个脚本偷懒
 
 1 #!/bin/bash
 2 # liyongjian5179@163.com
 3 #将所有的表名导出来
 4 mongo 192.168.112.128:27017/admin -uadmin -plyj &> 1.txt <<EOF
 5 use user_center;
 6 show collections
 7 exit;
 8 EOF
 9 
10 sed -i  '1,4d' 1.txt
11 #tail -n 2 1.txt > 2.txt
12 for TABLE in `cat 1.txt` ;do
13     echo ${TABLE}
14 #查重
15 mongo 192.168.112.128:27017/admin -uadmin -plyj <<EOF
16 use user_center
17 db.${TABLE}.aggregate([{\$group:{_id:{createTime:'\$createTime'},count:{\$sum:1}}},{\$match:{count:{\$gt:1}}}])
18 exit
19 EOF
20 STATUS=`echo $?`
21 echo $STATUS
22 if [ $STATUS = 0 ];then
23 #去重
24 mongo 192.168.112.128:27017/admin -uadmin -plyj  <<EOF
25 use user_center;
26 db["${TABLE}"].aggregate([{\$group: { _id: {createTime: '\$createTime'},count: {\$sum: 1},dups: {\$addToSet: '\$_id'}}},{\$match: {count: {\$gt: 1}}}]).forEach(function(doc){doc.dups.shift(); db["${TABLE}"].remove({_id: {\$in: doc.dups}}); });
27 exit
28 EOF
29 TATUS=`echo $?`
30 echo $STATUS
31 if [ $STATUS = 0 ];then echo "去重 success" ; else echo "fail" ;fi
32 
33 else
34     echo "wrong"
35     exit 123
36 
37 fi
38 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
 
 
 
 

 

 

 

 

你可能感兴趣的:(【解决】MongoDB 线上业务处理,数据去重脚本实现)